当前位置: 首页 > 知识库问答 >
问题:

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

欧旻
2023-03-14
   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**

预期输出:获取组之间计数为max的结果行,如:

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']分组:

   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

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

MM2  S4   bg     10
MM4  S2   cb     8
MM4  S2   uyi    8

共有1个答案

程俊力
2023-03-14
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

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

更新

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
 类似资料:
  • 问题内容: 在按“列”分组之后,如何在pandas数据框中找到列的最大值的所有行? 示例1:以下dataFrame,我将其分组: 预期的输出:获取各组之间计数最大的结果行,例如: 示例2:此数据框,我将其分组为: 对于上面的示例,我想获取每个组中等于的所有行,例如: 问题答案: 要获取原始DF的索引,你可以执行以下操作: 请注意,如果每个组有多个最大值,则将全部返回。 更新资料 在OP所要求的情况

  • 问题内容: 我有一组数据点(可以稀疏化),它们需要与贝塞尔曲线拟合。我需要速度超过准确性,但合身度应该足够好以至于可以识别。我还在寻找一种我可以使用的算法,该算法没有过多地使用库(特别是NumPy)。 我已经阅读了几篇研究论文,但是都没有足够的细节来全面实施。有开源示例吗? 问题答案: 我有类似的问题,我从Graphics Gems(1990)中找到了有关Bezier曲线拟合的“一种自动拟合数字化

  • 问题内容: 桌子: 我想获取UserId,每个UserId的max(Date)值。即,具有最新日期的每个UserId的值。有没有一种方法可以简单地在SQL中做到这一点?(最好是Oracle) 更新: 对于任何歧义,我们深表歉意:我需要获取所有UserIds。但是对于每个UserId,仅该用户具有最新日期的那一行。 问题答案: 这将检索其my_date列值等于该用户ID的my_date最大值的所有行

  • 我有一个这样的数据帧: 必修的: 相关链接:pandas groupby的最小和最大行 pandas groupby中两个系列的最大值和最小值 pandas groupby中的最大和最小日期 单击groupby,然后按列的值(例如,最小值、最大值)选择一行

  • 问题内容: 我正在处理一个Postgres表(称为“lives”),该表包含带有,和列的记录。我需要一个查询,该查询将为我提供每个usr_id的最新live_remaining总数 有多个用户(与usr_id不同) time_stamp不是唯一的标识符:有时,用户事件(表中的每一行)将使用相同的time_stamp发生。 trans_id仅在很小的时间范围内是唯一的:随着时间的流逝,它会重复 (对

  • 问题内容: 我有一个:键是字符串,值是整数。 例: 我想作为一个答案,因为它是具有更高价值的关键。 我使用带有反向键值元组的中间列表进行了以下操作: 那是一种更好(或更优雅)的方法吗? 问题答案: 您可以使用: 而不是在内存使用中构建新列表。该函数的参数是一个计算键的函数,该键用于确定如何对项目进行排名。 请注意,如果要使用另一个键值对,则此方法将仅返回两个值中的一个,即使它们都具有最大值。 如果