简体   繁体   English

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

[英]Finding the maximum difference for a subset of columns with pandas

I have a 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

I need to get the maximum difference between the column B,C and D and return the value in column A . 我需要获得B,C和D列之间的最大差异,并返回A列中的值。 in row 'a' maximum difference between columns is 55 - 34 = 21 . 在行'a'列之间的最大差异是55 - 34 = 21。 data is in a dataframe. 数据在数据框中。

The expected result is 预期的结果是

    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

Use np.ptp : 使用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

Or, find the max and min yourself: 或者,自己找到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

If performance is important, you can do this in NumPy space: 如果性能很重要,您可以在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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM