使用熊猫查找列子集的最大差异

Cha*_*ola 4 python numpy dataframe pandas

我有一个数据框:

   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
Run Code Online (Sandbox Code Playgroud)

我需要获得 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
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 5

使用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
Run Code Online (Sandbox Code Playgroud)

或者,找到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
Run Code Online (Sandbox Code Playgroud)

如果性能很重要,您可以在 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
Run Code Online (Sandbox Code Playgroud)