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

为何对MultiIndex DataFrame执行sum聚合时目标列C会被丢弃?

问题根因

你遇到的C列被丢弃的问题,由两个不规范的写法共同导致:

  • droplevel未显式指定操作轴,触发旧版本pandas的兼容bug
    早期pandas版本中DataFrame的droplevel方法默认操作轴是axis=1(列方向),和当前版本默认的axis=0(行方向)完全相反。你没有指定axis参数时,代码会尝试从列索引里删除名为'B'的层级,但你的列是单层结构、不存在名为'B'的索引层级,旧版本pandas不会抛出KeyError,反而会错误返回一个只有行索引、没有任何列的空DataFrame,后续执行sum自然只剩索引结构。
  • 使用了已被官方弃用的聚合语法
    从pandas 1.3版本开始,sum/mean等聚合方法的level参数就被标记为废弃,官方要求统一用groupby实现分组聚合。旧的level写法在跨版本运行时存在大量隐式索引对齐问题,即使你修正了droplevel的参数,后续pandas版本升级后这段代码也会直接报错无法运行。
修正方案

你的需求不需要先删除索引层级再聚合,直接用groupby指定分组的索引层级即可,写法稳定兼容所有pandas版本,不会出现列丢失问题:

# 按offset、A两个行索引层级分组,对C列求和
# 如果需要聚合所有数值列,去掉末尾的['C']即可
df.groupby(level=['offset', 'A'])['C'].sum()

如果你坚持要先删除B层级再聚合,一定要显式指定droplevel的操作轴,同时替换掉废弃的level写法:

df.droplevel('B', axis=0).groupby(level=['offset', 'A'])['C'].sum()

执行后就能得到预期输出:

offset A  C
0      0  1000
       1  100
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:12:17