我有一个大约有20列的数据框,但是我需要一个名为ID的列groupby,并计算出value1和value 2列之间的差异。
示例df:

ID  value1   value2
1     3         2
1     6         2
2     6         1
3     5         8
4     7         2
4     3         2

期望输出:
ID  value1   value2  maxabs
1     3         2      4
1     6         2      4
2     6         1      5
3     5         8      3
4     7         2      5
4     3         2      5

我试过这么简单:
df['maxabs'] = df.groupby(['ID'])[(df['value1'] - df['value2'])].abs().idxmax()

错误说找不到栏目,给我印了很多‘楠’。当然,有柱子。也许我需要在两个值都是“nan”时加上“nan”;
但我都不确定我是不是朝那个方向走了。

最佳答案

切换计算顺序;首先计算value1和value2之间的差,然后按ID分组并用max计算transform

df['maxabs'] = df.value1.sub(df.value2).abs().groupby(df.ID).transform('max')

df
#  ID   value1  value2  maxabs
#0  1        3       2       4
#1  1        6       2       4
#2  2        6       1       5
#3  3        5       8       3
#4  4        7       2       5
#5  4        3       2       5

关于python - 对一列进行分组并查找 Pandas 中其他两列的差的最大(绝对)值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44938474/

10-11 17:03