首页 > 解决方案 > 在pandas列上执行迭代减法和除法运算的有效方法

问题描述

我有以下数据框-

      A    B   C  Result
 0  232  120   9      91
 1  243  546   1      12
 2   12  120   5      53

我想执行以下类型的操作-

      A    B   C  Result   A-B/A+B   A-C/A+C   B-C/B+C
  0 232  120   9      91  0.318182  0.925311  0.860465
  1 243  546   1      12 -0.384030  0.991803  0.996344
  2  12  120   5      53 -0.818182  0.411765  0.920000

我正在使用

 df['A-B/A+B']=(df['A']-df['B'])/(df['A']+df['B'])
 df['A-C/A+C']=(df['A']-df['C'])/(df['A']+df['C'])
 df['B-C/B+C']=(df['B']-df['C'])/(df['B']+df['C']) 

我认为这是一种非常粗糙和丑陋的方式。如何以更正确的方式做到这一点?

标签: python-3.xpandas

解决方案


您可以执行以下操作:

# take columns in a list except the last column
colnames = df.columns.tolist()[:-1]

# compute 
for i, c in enumerate(colnames):
    if i != len(colnames):
        for k in range(i+1, len(colnames)):
            df[c + '_' + colnames[k]] = (df[c] - df[colnames[k]]) / (df[c] + df[colnames[k]])

# check result
print(df)

     A    B  C  Result       A_B       A_C       B_C
0  232  120  9      91  0.318182  0.925311  0.860465
1  243  546  1      12 -0.384030  0.991803  0.996344
2   12  120  5      53 -0.818182  0.411765  0.920000

推荐阅读