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

Pandas如何先按多字段分组求和再取每个分组内求和排名前2的数据

实现方法

原有代码报错原因

  • 第一段代码中,df.groupby(['A','B'])['C'].sum() 返回的是带A、B双层索引的Series,不存在名为A和C的列,后续groupby(['A'])和指定nlargest(2, 'C')都无法找到对应字段
  • 第二段代码的lambda表达式中没有指定nlargest的调用对象,写法错误

正确实现代码

写法1:可读性更强的分步写法

# 1. 按A、B组合分组对C求和,直接生成带列的DataFrame
sum_df = df.groupby(['A', 'B'], as_index=False)['C'].sum()
# 2. 按A分组,每组取C值排名前2的记录,group_keys=False避免生成多余的分组索引
result = sum_df.groupby('A', group_keys=False).apply(lambda x: x.nlargest(2, 'C'))

写法2:链式简写

# 求和后按索引第一层(即A字段)分组取前2,最后重置索引转成标准DataFrame
result = df.groupby(['A','B'])['C'].sum().groupby(level=0).nlargest(2).reset_index()

输出效果

拿示例数据运行后,输出结果符合需求:

ABC
Alabamaa100
Alabamab50
.........
Wyominga.51180
Wyomingb.51150

内容的提问来源于stack exchange,提问作者Tamal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:48:02