如何通过pandas获取多列组的最大值?

时间:2014-11-06 21:42:05

标签: python pandas group-by

Iam尝试根据groupby的另一列获取具有最大值的行,我正在尝试按照此处给出的解决方案Python : Getting the Row which has the max value in groups using groupby,但是当您应用

时它不起作用
annotations.groupby(['bookid','conceptid'], sort=False)['weight'].max()

我得到了

bookid    conceptid
12345678  3942     0.137271
          10673    0.172345
          1002     0.125136
34567819  44407    1.370921
          5111     0.104729
          6160     0.114766
          200      0.151629
          3504     0.152793

但我想只获得权重最高的行,例如

bookid    conceptid
12345678  10673    0.172345
34567819  44407    1.370921

我很感激任何帮助

3 个答案:

答案 0 :(得分:5)

如果你需要bookid并且想要最大重量,请试试这个

annotations.ix[annotations.groupby(['bookid'], sort=False)['weight'].idxmax()][['bookid', 'conceptid', 'weight']]

注意:由于Pandas v0.20 ix已被弃用。请改用.loc

答案 1 :(得分:1)

根据你想要的例子,我认为你的小组中有太多东西。我想你只想:

annotations.groupby(['bookid'], sort=False)['weight'].max()

答案 2 :(得分:0)

分组之后,我们可以将聚合函数作为字典传递给agg函数中的字典。

annotations.groupby('bookid').agg({'weight': ['max']})