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

Pandas多层索引DataFrame如何按二级列值求和新增M/F汇总列

问题原因

直接写df['M']、df['F']无法生效,是因为pandas对多层列索引用方括号直接取值时,默认仅匹配第一层(最外层)索引标签。当前列第一层为Class维度,取值只有A、B,M/F属于第二层Sex维度的标签,直接索引找不到目标列,无法得到正确求和结果。

正确实现代码

用xs方法指定索引层级筛选列,再拼接回原表即可,最终列结构会和给出的预期效果完全一致:

# 跨层级筛选Sex层为M、F的列,逐行求和
total_m = df.xs('M', level=1, axis=1).sum(axis=1)
total_f = df.xs('F', level=1, axis=1).sum(axis=1)

# 构造带二级索引的汇总列,第一层统一归为Total类
total_df = pd.concat(
    [total_m, total_f],
    axis=1,
    keys=[('Total', 'Total M'), ('Total', 'Total F')]
)

# 拼接原表和汇总列得到最终结果
df = pd.concat([df, total_df], axis=1)

可选写法

也可以用pd.IndexSlice配合loc实现跨层选列,效果完全相同:

total_m = df.loc[:, pd.IndexSlice[:, 'M']].sum(axis=1)
total_f = df.loc[:, pd.IndexSlice[:, 'F']].sum(axis=1)
# 后续拼接逻辑和上述写法一致

运行后输出的DataFrame结构、数值和预期效果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:31:06