如何划分熊猫数据框中除某一特定行以外的所有行?

vdu*_*b32 5 python dataframe pandas

目前,我正在与a工作pandas.DataFrame,我需要将整个数据框除以某一值(除一行以外)。将整个数据帧除以一个值很容易,但是我想保持其中一行完全相同。例如,如果我有一个如下数据框:

  A      B      C      D
10000  10000  10000  10000 
10000  10000  10000  10000 
10000  10000  10000  10000 
10000  10000  10000  10000 
  1      1      1      1   
10000  10000  10000  10000 
10000  10000  10000  10000 
Run Code Online (Sandbox Code Playgroud)

我想将所有行除以值1000,除第5行外,我希望所有值都保持与1相同。因此,新的数据帧如下所示:

 A   B   C   D
10  10  10  10
10  10  10  10
10  10  10  10
10  10  10  10
 1   1   1   1   
10  10  10  10 
10  10  10  10 
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法可以做到这一点?我觉得我缺少一些非常基本的东西。我尝试使用loc,iloc,mul和div,但无法使它们同时工作。

Ste*_*uch 4

如果保存感兴趣的行,然后将整个数据帧除以所需的值。然后您可以恢复感兴趣的行。

代码:

def df_divide_by_excect_row(in_df, divisor, row_to_ignore):
    row_to_save = in_df.iloc[row_to_ignore]
    new_df = in_df / divisor
    new_df.iloc[row_to_ignore] = row_to_save
    return new_df
Run Code Online (Sandbox Code Playgroud)

测试代码:

import pandas as pd

df = pd.read_fwf(StringIO(u"""
      A      B      C      D
    10000  10000  10000  10000 
    10000  10000  10000  10000 
    10000  10000  10000  10000 
    10000  10000  10000  10000 
      1      1      1      1   
    10000  10000  10000  10000 
    10000  10000  10000  10000"""), header=1)

print(df)
print(df_divide_by_excect_row(df, 1000, 4))
Run Code Online (Sandbox Code Playgroud)

结果:

       A      B      C      D
0  10000  10000  10000  10000
1  10000  10000  10000  10000
2  10000  10000  10000  10000
3  10000  10000  10000  10000
4      1      1      1      1
5  10000  10000  10000  10000
6  10000  10000  10000  10000

      A     B     C     D
0  10.0  10.0  10.0  10.0
1  10.0  10.0  10.0  10.0
2  10.0  10.0  10.0  10.0
3  10.0  10.0  10.0  10.0
4   1.0   1.0   1.0   1.0
5  10.0  10.0  10.0  10.0
6  10.0  10.0  10.0  10.0
Run Code Online (Sandbox Code Playgroud)