找到带有熊猫的列子集的最大差异

时间:2018-12-23 06:03:30

标签: python pandas numpy dataframe

我有一个数据框:

   A   B    C   D   E
0  a  34   55  43  aa
1  b  53   77  65  bb
2  c  23  100  34  cc
3  d  54   43  23  dd
4  e  23   67  54  ee
5  f  43   98  23  ff

我需要获取B,C和D列之间的最大差,并返回A列中的值。在“ a”行中,列之间的最大差为55-34 = 21。数据在数据框中。

预期结果是

    A   B    C   D   E
0  21  34   55  43  aa
1  24  53   77  65  bb
2  77  23  100  34  cc
3  31  54   43  23  dd
4  44  23   67  54  ee
5  75  43   98  23  ff

1 个答案:

答案 0 :(得分:2)

使用np.ptp

# df['A'] = np.ptp(df.loc[:, 'B':'D'], axis=1)
df['A'] = np.ptp(df[['B', 'C', 'D']], axis=1)
df

    A   B    C   D   E
0  21  34   55  43  aa
1  24  53   77  65  bb
2  77  23  100  34  cc
3  31  54   43  23  dd
4  44  23   67  54  ee
5  75  43   98  23  ff

或者,自己找到maxmin

df['A'] = df[['B', 'C', 'D']].max(1) - df[['B', 'C', 'D']].min(1)
df

    A   B    C   D   E
0  21  34   55  43  aa
1  24  53   77  65  bb
2  77  23  100  34  cc
3  31  54   43  23  dd
4  44  23   67  54  ee
5  75  43   98  23  ff

如果性能很重要,则可以在NumPy空间中执行此操作:

v = df[['B', 'C', 'D']].values
df['A'] = v.max(1) - v.min(1)
df

    A   B    C   D   E
0  21  34   55  43  aa
1  24  53   77  65  bb
2  77  23  100  34  cc
3  31  54   43  23  dd
4  44  23   67  54  ee
5  75  43   98  23  ff