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

