提取组熊猫数据框中具有最大值的行

新手上路,请多包涵

这里提出了一个类似的问题: Python : Getting the Row which has the maximum value in groups using groupby

但是,即使该组中有多个具有最大值的记录,我也只需要每组一个记录。

在下面的示例中,我需要一条记录“s2”。对我来说,哪个并不重要。

 >>> df = DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','s3'], 'Value':[1,2,3,4,5,6], 'count':[3,2,5,10,10,6]})
>>> df
   Mt Sp  Value  count
0  s1  a      1      3
1  s1  b      2      2
2  s2  c      3      5
3  s2  d      4     10
4  s2  e      5     10
5  s3  f      6      6
>>> idx = df.groupby(['Mt'])['count'].transform(max) == df['count']
>>> df[idx]
   Mt Sp  Value  count
0  s1  a      1      3
3  s2  d      4     10
4  s2  e      5     10
5  s3  f      6      6
>>>

原文由 user1140126 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 361
2 个回答

您可以使用 first

 In [14]: df.groupby('Mt').first()
Out[14]:
   Sp  Value  count
Mt
s1  a      1      3
s2  c      3      5
s3  f      6      6

更新

设置 as_index=False 实现你的目标

In [28]: df.groupby('Mt', as_index=False).first()
Out[28]:
   Mt Sp  Value  count
0  s1  a      1      3
1  s2  c      3      5
2  s3  f      6      6

再次更新

抱歉误解你的意思。如果你想在一组中有最大数量的,你可以先排序

In [196]: df.sort('count', ascending=False).groupby('Mt', as_index=False).first()
Out[196]:
   Mt Sp  Value  count
0  s1  a      1      3
1  s2  e      5     10
2  s3  f      6      6

原文由 waitingkuo 发布,翻译遵循 CC BY-SA 3.0 许可协议

要获得最大值 count 的第一次出现,您可以使用 pandas.DataFrame.idxmax() 函数:

 >>> df.iloc[df.groupby(['Mt']).apply(lambda x: x['count'].idxmax())]
   Mt Sp  Value  count
0  s1  a      1      3
3  s2  d      4     10
5  s3  f      6      6

原文由 Roman Pekar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题