Pandas 在dataframe中应用相同的计算列

Pandas 在dataframe中应用相同的计算列,pandas,Pandas,我有一个数据框: df Case Type Incr_1_3 Incr_2_3 Incr_3_3 Saving_1_3 Saving_2_3 Saving_3_3 0 HI PC1 0.046 2.388 0.388 0.254 2.539 2.539 1 HI PC2

我有一个数据框:

         df
                  Case  Type  Incr_1_3  Incr_2_3 Incr_3_3  Saving_1_3 Saving_2_3 Saving_3_3
              0    HI    PC1   0.046      2.388   0.388       0.254     2.539      2.539                   
              1    HI    PC2   0.000      0.024   0.024       0.026     0.054      0.054                
              2    LO    PC1   0.000      0.024   0.024       0.026     0.054      0.054
              3    LO    PC2   0.030      0.054   0.074       0.126     0.754      0.036
              4    RF    PC1   0.030      0.054   0.074       0.126     0.754      0.036
              4    RF    PC2   0.030      0.054   0.074       0.126     0.754      0.036
我想计算“Saving”和“Incr”列之间的差异。每个新列的代码如下所示:

                df['D_1_3']=df['Saving_1_3']-df['Incr_1_3']
                df['D_2_3']=df['Saving_2_3']-df['Incr_2_3']
                df['D_2_3']=df['Saving_3_3']-df['Incr_3_3']
我可以手动完成,但是,我无法找到一种更有效的方法来执行计算,因为实际上我的dataframe有更多的列

我尝试了以下方法:

          saving_list=['Saving_1_3','Saving_2_3','Saving_3_3']
          cost_list=['Incr_1_3','Incr_2_3','Incr_3_3']

          df[['A','B','C']]=df[saving_list]-df[cost_list]
它向我提供了以下错误消息:

          "ValueError: Columns must be same length as key"
谢谢你的帮助

这可能会对你有所帮助

result = df[saving_list].values - df[cost_list].values
df['A'], df['B'], df['C'] = result[:, 0], result[:, 1], result[:, 2]
或者这个:

df = pd.concat([df, pd.DataFrame(df[saving_list].values - df[cost_list].values, columns=['A', 'B', 'C'])], axis=1)
这可能对你有帮助

result = df[saving_list].values - df[cost_list].values
df['A'], df['B'], df['C'] = result[:, 0], result[:, 1], result[:, 2]
或者这个:

df = pd.concat([df, pd.DataFrame(df[saving_list].values - df[cost_list].values, columns=['A', 'B', 'C'])], axis=1)
用于在
numpy
矩阵之间进行减法

inc_cols=df.columns[df.columns.str.contains('Inc')]
saving_cols=df.columns[df.columns.str.contains('Saving')]
new_cols=inc_cols.str.replace('Incr','D')
new_df = df.assign(**dict(zip(new_cols, 
                              (df[saving_cols].values-df[inc_cols].values).T)))
print(new_df)

您可以查看以取消理解
**

用于在
numpy
矩阵之间进行减法

inc_cols=df.columns[df.columns.str.contains('Inc')]
saving_cols=df.columns[df.columns.str.contains('Saving')]
new_cols=inc_cols.str.replace('Incr','D')
new_df = df.assign(**dict(zip(new_cols, 
                              (df[saving_cols].values-df[inc_cols].values).T)))
print(new_df)


您可以查看以取消理解
**

此操作的问题在于您仍然必须指定名称此操作的问题在于您仍然必须指定名称