Python-使用groupby获取分组中具有最大值的行

发布于 2021-02-02 23:24:07

在按“['Sp','Mt']列”分组之后,如何在pandas数据框中找到count列的最大值的所有行?

示例1:以下dataFrame,我将其分组['Sp','Mt']

   Sp   Mt Value   count
0  MM1  S1   a      **3**
1  MM1  S1   n      2
2  MM1  S3   cb     5
3  MM2  S3   mk      **8**
4  MM2  S4   bg     **10**
5  MM2  S4   dgd      1
6  MM4  S2  rd     2
7  MM4  S2   cb      2
8  MM4  S2   uyi      **7**

预期的输出:获取各组之间计数最大的结果行,例如:

0  MM1  S1   a      **3**
1 3  MM2  S3   mk      **8**
4  MM2  S4   bg     **10** 
8  MM4  S2   uyi      **7**

示例2:此数据框,我将其分组为['Sp','Mt']

   Sp   Mt   Value  count
4  MM2  S4   bg     10
5  MM2  S4   dgd    1
6  MM4  S2   rd     2
7  MM4  S2   cb     8
8  MM4  S2   uyi    8

对于上面的示例,我想获取每个组中等于max的所有行,count例如:

MM2  S4   bg     10
MM4  S2   cb     8
MM4  S2   uyi    8
关注者
0
被浏览
342
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。
    In [1]: df
    Out[1]:
        Sp  Mt Value  count
    0  MM1  S1     a      3
    1  MM1  S1     n      2
    2  MM1  S3    cb      5
    3  MM2  S3    mk      8
    4  MM2  S4    bg     10
    5  MM2  S4   dgd      1
    6  MM4  S2    rd      2
    7  MM4  S2    cb      2
    8  MM4  S2   uyi      7
    
    In [2]: df.groupby(['Mt'], sort=False)['count'].max()
    Out[2]:
    Mt
    S1     3
    S3     8
    S4    10
    S2     7
    Name: count
    

    要获取原始DF的索引,你可以执行以下操作:

    In [3]: idx = df.groupby(['Mt'])['count'].transform(max) == df['count']
    
    In [4]: df[idx]
    Out[4]:
        Sp  Mt Value  count
    0  MM1  S1     a      3
    3  MM2  S3    mk      8
    4  MM2  S4    bg     10
    8  MM4  S2   uyi      7
    

    请注意,如果每个组有多个最大值,则将全部返回。

    更新资料

    在OP所要求的情况下,这真是万劫不复:

    In [5]: df['count_max'] = df.groupby(['Mt'])['count'].transform(max)
    
    In [6]: df
    Out[6]:
        Sp  Mt Value  count  count_max
    0  MM1  S1     a      3          3
    1  MM1  S1     n      2          3
    2  MM1  S3    cb      5          8
    3  MM2  S3    mk      8          8
    4  MM2  S4    bg     10         10
    5  MM2  S4   dgd      1         10
    6  MM4  S2    rd      2          7
    7  MM4  S2    cb      2          7
    8  MM4  S2   uyi      7          7
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看