动态地(不知道列的名称)使用python数据帧基于其他列计算新列

时间:2017-01-16 17:24:51

标签: python dataframe

我有一个动态构建的python数据框(暗示我们无法预见列的数量和名称)。

我想要做的是创建一个新列已验证根据以下内容进行计算:

ABS((MAX(A,B,C)-MIN(A,B,C))/(MAX(A,B,C) or MIN(A,B,C) or 1))
  • | a | C | c |验证
  • | 1 | 2 | 3 | 0.666
  • | -1 | -2 | -3 | 2

请记住,列可以有另一个名称和另一列数(还必须支持以下内容): ABS((MAX(e,f)-MIN(e,f))/(MAX(e,f)或MIN(e,f)或1))

  • | e | f |已验证
  • | 4 | 2 | 0.5

1 个答案:

答案 0 :(得分:0)

IIUC你可以这样做:

df['verified'] = df.max(1).sub(df.min(1)).div(df.max(1) | df.min(1) | 1).abs()

演示:

In [117]: df
Out[117]:
    a   b   c
0  19   7   9
1   1  11   5
2  18   5  17
3   0   2   4
4  14   1   6
5   6  19  10
6  14   4   9
7   5  12  18
8  18   1  18
9  18   7  14

In [118]: df['verified'] = df.max(1).sub(df.min(1)).div(df.max(1) | df.min(1) | 1).abs()

In [119]: df
Out[119]:
    a   b   c  verified
0  19   7   9  0.521739
1   1  11   5  0.909091
2  18   5  17  0.565217
3   0   2   4  0.800000
4  14   1   6  0.866667
5   6  19  10  0.565217
6  14   4   9  0.666667
7   5  12  18  0.565217
8  18   1  18  0.894737
9  18   7  14  0.478261

示例数据集:

In [121]: df
Out[121]:
   a  b  c
0  1  2  3
1 -1 -2 -3

In [122]: df['verified'] = df.max(1).sub(df.min(1)).div(df.max(1) | df.min(1) | 1).abs()

In [123]: df
Out[123]:
   a  b  c  verified
0  1  2  3  0.666667
1 -1 -2 -3  2.000000

In [125]: df
Out[125]:
   e  f
0  4  2

In [126]: df['verified'] = df.max(1).sub(df.min(1)).div(df.max(1) | df.min(1) | 1).abs()

In [127]: df
Out[127]:
   e  f  verified
0  4  2  0.285714

检查:

In [129]: (4 - 2) / (4 | 2 | 1)
Out[129]: 0.2857142857142857