我有一个看起来像这样的DataFrame ......
idn value
0 ID1 25
1 ID1 30
2 ID2 30
3 ID2 50
我想在此框架中添加另一列,即最大值'按' idn'
分组我想要一个看起来像这样的结果。
idn value max_val
0 ID1 25 30
1 ID1 30 30
2 ID2 30 50
3 ID2 50 50
我可以提取最大值'像这样使用一组......
df[['idn', 'value']].groupby('idn')['value'].max()
但是,我无法将该结果合并回原始DataFrame。
获得理想结果的最佳方法是什么?
谢谢
答案 0 :(得分:8)
在groupby对象上使用transform
方法:
In [5]: df['maxval'] = df.groupby(by=['idn']).transform('max')
In [6]: df
Out[6]:
idn value maxval
0 ID1 25 30
1 ID1 30 30
2 ID2 30 50
3 ID2 50 50
答案 1 :(得分:1)
将df
的索引设置为idn
,然后使用df.merge
。合并后,重置索引并重命名列
dfmax = df.groupby('idn')['value'].max()
df.set_index('idn', inplace=True)
df = df.merge(dfmax, how='outer', left_index=True, right_index=True)
df.reset_index(inplace=True)
df.columns = ['idn', 'value', 'max_value']