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

获取分组中值最大的行[重复]

王叶五
2023-03-14

我有一个数据帧,我根据id-列进行分组。对于每个组,我想得到包含最大值的行(整行,而不仅仅是值)。我能够做到这一点,首先获得每个组的最大值,然后创建一个过滤器数组,然后在原始数据帧上应用过滤器。像这样,

import pandas as pd

# Dummy data
df = pd.DataFrame({'id' : [1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4],
                   'other_value' : ['a', 'e', 'b', 'b', 'a', 'd', 'b', 'f' ,'a' ,'c', 'e', 'f'],
                   'value' : [1, 3, 5, 2, 5, 6, 2, 4, 6, 1, 7, 3]
                   })

# Get the max value in each group
df_max = df.groupby('id')['value'].max()

# Create row filter
row_filter = [df_max[i]==v for i, v in zip(df['id'], df['value'])]

# Filter
df_target = df[row_filter]
df_target
Out[58]: 
    id other_value  value
2    1           b      5
5    2           d      6
7    3           f      4
10   4           e      7

这个解决方案是可行的,但不知何故似乎过于繁琐。有人知道更好的方法吗?最好是一条线。关于潜在的重复,我稍后会处理这些:)

共有1个答案

桑坚成
2023-03-14

使用DataFrameGroupBy.idxmax如果需要只选择一个最大值:

df = df.loc[df.groupby('id')['value'].idxmax()]
print (df)
    id other_value  value
2    1           b      5
5    2           d      6
7    3           f      4
10   4           e      7

如果需要多个最大值,请按max值查看所有行:

df = pd.DataFrame({'id' : [1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4],
                   'other_value' : ['a', 'e', 'b', 'b', 'a', 'd', 'b', 'f' ,'a' ,'c', 'e', 'f'],
                   'value' : [1, 3, 5, 2, 5, 6, 2, 4, 6, 1, 7, 7]
                   })
print (df)
    id other_value  value
0    1           a      1
1    1           e      3
2    1           b      5
3    2           b      2
4    2           a      5
5    2           d      6
6    3           b      2
7    3           f      4
8    4           a      6
9    4           c      1
10   4           e      7
11   4           f      7

df = df[df.groupby('id')['value'].transform('max') == df['value']]
print (df)
    id other_value  value
2    1           b      5
5    2           d      6
7    3           f      4
10   4           e      7
11   4           f      7
 类似资料:
  • 问题内容: 在按“列”分组之后,如何在pandas数据框中找到列的最大值的所有行? 示例1:以下dataFrame,我将其分组: 预期的输出:获取各组之间计数最大的结果行,例如: 示例2:此数据框,我将其分组为: 对于上面的示例,我想获取每个组中等于的所有行,例如: 问题答案: 要获取原始DF的索引,你可以执行以下操作: 请注意,如果每个组有多个最大值,则将全部返回。 更新资料 在OP所要求的情况

  • 预期输出:获取组之间计数为max的结果行,如: 示例2:这个数据帧,我按分组: 对于上面的示例,我希望获取每个组中等于max的所有行,例如:

  • 问题内容: 我正在尝试创建一个JavaScript函数,该函数从外部JSON中的数组获取信息,然后为JSON变量之一获取最大值(或前5个值)。对于此示例,假设我要获取值“ ppg”的最大值。这是数组的一个小示例: 遍历数组以获取最大值,然后从该值获取“玩家”和“团队”值的最佳方法是什么?该页面将是交互式的,因为我将具有一个下拉菜单栏,允许查看者在“玩家”和“团队”之外的六个JSON值之一之间进行选

  • 在MySql表中拥有以下数据: 我想选择唯一的unit_code(unit_code可以在表中的unit_code列中出现几次),日期为最大值且日期等于或小于今天的金额和日期。我在努力,但还没有接近结果。

  • 如何获得包含每个分组集的最大值的行? 关于这个问题,我见过一些过于复杂的变体,但没有一个有好的答案。我试着举一个最简单的例子: 给出一个类似下面的表,包含person,group,和age列,如何得到每个组中最年长的人?(一组内的平局应给出第一个按字母顺序排列的结果) 所需的结果集:

  • 问题内容: 这个问题已经在这里有了答案 : 使用Java在原始数组中查找最大值/最小值 (15个答案) 5年前关闭。 这是我的代码。我需要获取数组的最小值,最大值才能为我获取范围,无论何时输入数字,最小值均为0。请帮助我。谢谢:) 问题答案: 同样,通过更改较小的符号可以找到最小值。