Python 提取组数据帧中具有最大值的行

Python 提取组数据帧中具有最大值的行,python,pandas,Python,Pandas,这里提出了一个类似的问题: 但是,我只需要每个组一条记录,即使该组中有多条记录具有最大值 在下面的示例中,我需要一条“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 M

这里提出了一个类似的问题:

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

在下面的示例中,我需要一条“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
>>> 

您可以先使用

In [14]: df.groupby('Mt').first()
Out[14]: 
   Sp  Value  count
Mt                 
s1  a      1      3
s2  c      3      5
s3  f      6      6
更新 将
设置为_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

要获取第一次出现的最大
计数
,可以使用以下函数:

>>> 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的回答,我发现以下代码可以工作:

from math import isnan
df.iloc[[int(x) for x in df.groupby(by=df.Mt).apply(lambda x: x['count'].idxmax()).values if not isnan(y)]]

请注意isnan条件,因为我的应用程序在我们正在最大化的列中有一些nan条目。

谢谢,数据帧的结构发生了变化。如何返回相同的结构(即,行数和列数)@user1140126对于Mt=s2,这一个返回5而不是10,我想你需要每行的最大计数?他说哪一行是他的并不重要post@waitingkuo我不是以英语为母语的人,但对我来说,
每组一条记录,即使该组中有多条记录具有最大值
表示一条记录具有最大值,即使有多条记录具有该值。看起来我错了:)另外,问题的标题是
提取组中具有最大值的行(
:)这与其他建议的速度相比如何?这个答案是我能找到的最快的解决方案: