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

如何在Pandas中按多列聚合sum并剔除False分组结果?

嘿,我来帮你搞定这个问题!你现在遇到的情况是因为把区域筛选条件直接当成了pivot_table的columns参数,所以结果自动拆分出了符合条件(True)和不符合(False)的两组。下面给你两种实用的解决办法:

方法1:直接清理现有结果,删掉False组

如果你已经生成了dt_test,可以利用多级列索引快速筛选出True对应的部分:

# 提取所有年份列中标记为True的分组
dt_clean = dt_test.xs(True, level=1, axis=1)
# 可选:把多级列索引简化成普通年份列名
dt_clean.columns = dt_clean.columns.get_level_values(0)

处理后就能得到只保留目标区域求和结果的DataFrame啦:

1990  1995  2000
Scenario Variable Unit               
Baseline Methane  MtCO2eq    26    45    64

(PS:你示例里的True组1990结果写10应该是笔误啦,实际CHINA+INDIA+INDONESIA+KOREA的1990总和是5+6+7+8=26哦)

方法2:先筛选目标行再聚合(更推荐)

其实完全不需要用columns参数来拆分分组,先把需要的区域筛选出来再聚合,逻辑更清晰,结果也直接符合需求:

# 先定义你要汇总的目标区域列表
target_regions = ['CHINA', 'INDIA', 'INDONESIA', 'KOREA']
# 筛选出这些区域的行
filtered_dt = dt[dt['Region'].isin(target_regions)]
# 按指定维度聚合求和
dt_result = filtered_dt.pivot_table(index=['Scenario','Variable','Unit'], aggfunc=np.sum)

这样生成的结果直接就是你要的汇总数据,不会出现多余的False组:

1990  1995  2000
Scenario Variable Unit               
Baseline Methane  MtCO2eq    26    45    64
额外小技巧:如果需要多组汇总

要是你之后需要同时生成多个区域组的汇总(比如既要东亚组又要其他区域组),可以先给数据打个分组标签再聚合,这样列名会更直观:

import numpy as np
# 给区域打分组标签
dt['Region_Group'] = np.where(dt['Region'].isin(target_regions), 'EastAsia', 'Others')
# 按分组聚合
dt_groups = dt.pivot_table(index=['Scenario','Variable','Unit'], columns='Region_Group', aggfunc=np.sum)

这样结果里的列名就是EastAsia和Others,比True/False好理解多啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:36:14