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

Python Pandas:按MultiIndex单层级分组并保留其余层级的实现

解决保留MultiIndex第二层级的分组求和问题

你想要的是在按label_dict合并level0标签的同时,保留第二层级(4th/5th)的结构,只需要在分组时同时指定映射后的level0标签和原level1标签作为分组键即可,而不是只按label_dict分组(那样会丢失level1的信息)。

具体实现代码

import numpy as np
import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame(np.arange(0, 24).reshape((3, 8)))
df.columns = pd.MultiIndex.from_arrays([
    ['a1', 'a1', 'a2', 'a2', 'b1', 'b1', 'b2', 'b2'],
    ['4th', '5th', '4th', '5th', '4th', '5th', '4th', '5th']
])

label_dict = {'a1': 'A', 'a2': 'A', 'b1': 'B', 'b2': 'B'}

# 核心:同时按映射后的level0和原level1分组求和
res = df.groupby(
    by=[
        df.columns.get_level_values(0).map(label_dict),  # 映射后的level0标签
        df.columns.get_level_values(1)  # 保留原level1标签
    ],
    axis=1
).sum()

print(res)

输出结果

A        B     
   4th 5th  4th 5th
0    2   4   10  12
1   18  20   26  28
2   34  36   42  44

原理说明

  • df.columns.get_level_values(0).map(label_dict):把原level0的a1/a2/b1/b2映射为A/A/B/B
  • 同时将原level1的4th/5th作为分组的一部分,这样分组后会保留两个层级的结构,对每个(A,4th)、(A,5th)、(B,4th)、(B,5th)分别求和
  • 最终得到的结果就是你期望的保留第二层级的合并求和结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:41:22