这里提出了一个类似的问题: Python:使用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
>>>
Run Code Online (Sandbox Code Playgroud)
wai*_*kuo 28
您可以使用 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
Run Code Online (Sandbox Code Playgroud)
设定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
Run Code Online (Sandbox Code Playgroud)
很抱歉误解了你的意思.如果您想要一个组中具有最大计数的那个,您可以先对其进行排序
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
Run Code Online (Sandbox Code Playgroud)
Rom*_*kar 19
要获得最大值,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28319 次 |
| 最近记录: |