我有一个动态构建的python数据框(暗示我们无法预见列的数量和名称)。
我想要做的是创建一个新列已验证根据以下内容进行计算:
ABS((MAX(A,B,C)-MIN(A,B,C))/(MAX(A,B,C) or MIN(A,B,C) or 1))
请记住,列可以有另一个名称和另一列数(还必须支持以下内容): ABS((MAX(e,f)-MIN(e,f))/(MAX(e,f)或MIN(e,f)或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