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

标签 python pandas dataframe group-by max

['Sp','Mt'] 列分组后,如何查找 pandas DataFrame 中具有 count 列最大值的所有行?

示例 1:以下 DataFrame:

   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**

预期输出是获取每组中计数最大的结果行,如下所示:

   Sp   Mt   Value  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**

示例 2:

   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

预期输出:

   Sp   Mt   Value  count
4  MM2  S4   bg     10
7  MM4  S2   cb     8
8  MM4  S2   uyi    8

最佳答案

首先,我们可以获得每个组的最大计数,如下所示:

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(['Sp', 'Mt'])['count'].max()
Out[2]:
Sp   Mt
MM1  S1     3
     S3     5
MM2  S3     8
     S4    10
MM4  S2     7
Name: count, dtype: int64

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

In [3]: idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count']

In [4]: df[idx]
Out[4]:
    Sp  Mt Value  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

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

<小时/>

更新

万岁玛丽有机会这就是OP所要求的:

In [5]: df['count_max'] = df.groupby(['Sp', '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          5
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

关于python - 使用 groupby 获取组中具有最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55656932/

相关文章:

python - 得到一个 'AttributeError at/login/authenticated' , 'User' 对象没有属性 'backend'

python - Cassandra 无限行响应

python - R 的 %in% 函数的 python 版本

python - 无法使用 xpath 使用 selenium 选择元素

android - 如何在flask framework web server和android app之间发送和接收数据

python - 从 Dataframe 中的 2 个或更多列获取唯一值的有效方法

python - Pandas Dataframe 中两个日期之间的营业时间(包括节假日)

python - 检查 Pandas 数据框是否是其他数据框的子集

r - 在R中将一个数据帧添加到另一数据帧的末尾

r - 从列表创建数据框