如何在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
相关产品推荐
相关产品推荐

