Python 不删除列的groupby max
您好,我有以下假设的dfPython 不删除列的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 = 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上删除重复项