将pandas groupby结果合并回DataFrame

时间:2015-04-15 04:13:57

标签: python pandas

我有一个看起来像这样的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。

获得理想结果的最佳方法是什么?

谢谢

2 个答案:

答案 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']