![](/img/trans.png)
[英]Pandas Groupby - select row with highest value in one column if multiple rows exceed value in another
[英]Select rows with highest value from groupby
我有一个数据框,其中包含有关用户的一些信息。 有一列用于用户,一列用于类型,一列用于计数,如下所示:
name type count
robert x 123
robert y 456
robert z 5123
charlie x 442123
charlie y 0
charlie z 42
我试图找出每个名称的计数最高的类型,所以对于这种情况,我想选择这个:
name type count
robert z 5123
charlie x 442123
我知道我可以做这样的事情来获得每个名称的最大计数,但我不确定如何包含“类型”列,这实际上是最重要的
df.sort_values('count', ascending=False).drop_duplicates('name').sort_index()
任何帮助是极大的赞赏!
尝试这个
df.loc[df.groupby('name')['count'].idxmax()]['type']
name type count
3 charlie x 442123
2 robert z 5123
如果您不仅想要一个最大值,而且想要每个组的前n
值,您可以这样做(例如n = 2
)
df.loc[df.groupby('name')['count'].nlargest(2).index.get_level_values(1)]
name type count
3 charlie x 442123
5 charlie z 42
2 robert z 5123
1 robert y 456
如果不同类型的名称有两个最大值怎么办:
print(df)
name type count
0 robert x 123
1 robert y 456
2 robert z 5123
3 robert a 5123
4 charlie x 442123
5 charlie y 0
6 charlie z 42
使用布尔索引:
df[df['count'] == df.groupby('name')['count'].transform('max')]
输出:
name type count
2 robert z 5123
3 robert a 5123
4 charlie x 442123
只需按名称和数量排序,按名称分组并保持在第一位。
df.sort_values(['name', 'count'],ascending=False).groupby(['name']).first().reset_index()
会给你:
name type count
3 charlie x 442123
2 robert z 5123
(非常轻微)更好,你可以这样做:
df.loc[df.groupby('name')['count'].idxmax(),'type']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.