Python 按一列分组,并查找表中其他两列之差的最大(绝对)值

Python 按一列分组,并查找表中其他两列之差的最大(绝对)值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个大约有20列的数据框架,但我需要一个名为ID的列来分组,然后计算value1和value2列的差。 示例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

我有一个大约有20列的数据框架,但我需要一个名为ID的列来分组,然后计算value1和value2列的差。 示例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”;
但我不确定我是否找到了方向

切换计算顺序;首先计算值1和值2之间的差值,然后按ID分组,并使用
变换计算
max

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

试试这个。另外,你也可以使用
merge
join
,我只是习惯了
map

df['maxabs']=df.ID.map(df.groupby(['ID']).apply(lambda x: max(abs(x.value1-x.value2))))

   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