You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Pandas groupby聚合结果中提取指定列最大值对应的行

解决方法
  • 你调用agg(['count'])后得到的是多级列索引的DataFrame,列名格式为(原列名, 'count'),比如foo列的计数字段是('foo', 'count')
  • 你可以直接基于这个多级索引筛选,也可以先把列名拍平简化后续操作

方案1:直接基于多级索引筛选

# 先保存分组统计结果
grouped_df = df.groupby('country').agg(['count'])

# 分别计算foo、bar列count的最大值
max_foo = grouped_df[('foo', 'count')].max()
max_bar = grouped_df[('bar', 'count')].max()

# 筛选满足 foo count等于最大值 或 bar count等于最大值的行
target_rows = grouped_df[(grouped_df[('foo', 'count')] == max_foo) | (grouped_df[('bar', 'count')] == max_bar)]

运行后target_rows就会返回USA、India对应的两行结果。


方案2:聚合时拍平列名(更易维护)

如果你不想处理多级索引,可以在聚合阶段直接指定扁平化的列名:

grouped_df = df.groupby('country', as_index=False).agg(
    foo_count = ('foo', 'count'),
    bar_count = ('bar', 'count')
)

max_foo = grouped_df['foo_count'].max()
max_bar = grouped_df['bar_count'].max()

target_rows = grouped_df[(grouped_df['foo_count'] == max_foo) | (grouped_df['bar_count'] == max_bar)]

如果你的实际统计列是输出中显示的GDP、population,把上述代码里的foo、bar替换成对应的列名即可。


内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:45:02