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

