繁体   English   中英

从 groupby 中选择具有最高值的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM