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

如何在Pandas同一结果DataFrame中对不同索引层级执行groupby().sum()

解决方案

可以利用groupby.transform()方法直接生成与原DataFrame同长度的聚合结果列,无需单独计算后再合并,步骤如下:

1. 生成各层级求和列

  • key1层级总和:按key1分组后,用transform('sum')得到每个key1对应的总count,生成count_key1列
  • key2层级总和:按key1+key2组合分组后,用transform('sum')得到每组的总count,生成count_key2列

2. 调整列顺序输出

将新生成的列加入原DataFrame后,调整列的顺序至目标格式即可。

完整代码:

import pandas as pd

# 原DataFrame
df = pd.DataFrame({
   "key1":['a','a','a','a','b','b','b','b'],
   "key2":[1,1,1,2,3,3,4,4],
   "key3":['R','S','T','U','V','W','X','Y'],
   "count":[10,20,10,5,12,13,8,22]
})

# 生成各层级求和列
df['count_key1'] = df.groupby('key1')['count'].transform('sum')
df['count_key2'] = df.groupby(['key1', 'key2'])['count'].transform('sum')

# 调整列顺序到目标格式
result_df = df[['key1', 'count_key1', 'key2', 'count_key2', 'key3', 'count']]
print(result_df)

执行后输出结果:

key1  count_key1  key2  count_key2 key3  count
0    a          45     1          40    R     10
1    a          45     1          40    S     20
2    a          45     1          40    T     10
3    a          45     2           5    U      5
4    b          55     3          25    V     12
5    b          55     3          25    W     13
6    b          55     4          30    X      8
7    b          55     4          30    Y     22

方法说明

transform()方法的核心作用是将聚合结果广播到原数据的每一行,保证结果列与原DataFrame长度一致,直接作为新列添加即可,避免了手动合并不同层级聚合结果的繁琐操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:05:24