Python 不删除列的groupby max

Python 不删除列的groupby max,python,pandas,group-by,pandas-groupby,Python,Pandas,Group By,Pandas Groupby,您好,我有以下假设的df df = pd.DataFrame({ 'sp' : ['MM1', 'MM1', 'MM1', 'MM2', 'MM2', 'MM2', 'MM4', 'MM4','MM4'], 'mt' : ['S1', 'S1', 'S3', 'S3', 'S4', 'S4', 'S2', 'S2', 'S2'], 'val' : ['a', 'n', 'cb', 'mk', 'bg', 'dgb', 'rd', 'cb', 'uyi'], 'count' : [3,2,5,8,

您好,我有以下假设的df

df = pd.DataFrame({
'sp' : ['MM1', 'MM1', 'MM1', 'MM2', 'MM2', 'MM2', 'MM4', 'MM4','MM4'],
'mt' : ['S1', 'S1', 'S3', 'S3', 'S4', 'S4', 'S2', 'S2', 'S2'],
'val' : ['a', 'n', 'cb', 'mk', 'bg', 'dgb', 'rd', 'cb', 'uyi'],
'count' : [3,2,5,8,10,1,2,2,7]
})
top =df.groupby(['sp','mt']).agg({'count':'max'})
top
我在不删除val列的情况下按sp和mt进行分组,如何才能做到这一点?其思想是在count为max的位置查找val的值


谢谢

您可以使用
GroupBy.idxmax
作为
.loc

idx = df.groupby(['sp', 'mt'])['count'].idxmax()
df.loc[idx.values, :]

    sp  mt  val  count
2  MM1  S3   cb      5
4  MM2  S4   bg     10
8  MM4  S2  uyi      7
选项1-使用
groupby

df['count1'] = df.groupby(['sp','mt'])['count'].transform('max')
df = df[df['count'] == df['count1']].drop('count1',axis=1)
选项2使用
排序
删除重复项

df = df.sort_values('count',ascending=False).drop_duplicates(['sp','mt']).sort_index()
两张照片:

    sp  mt  val  count
0  MM1  S1    a      3
2  MM1  S3   cb      5
3  MM2  S3   mk      8
4  MM2  S4   bg     10
8  MM4  S2  uyi      7

val有多个值。您的请求只有在您说“在count‘到达’MAXA的位置查找val值时才有效谢谢Aaj的评论,这正是我在这里试图实现的,有什么提示吗?请尝试澄清您的问题。当涉及到groupby、count、max等时,有许多类似的操作。按“count”排序值,然后在sp和mt上删除重复项