如何将带Multiindex多层索引的DataFrame拆分为多个独立DataFrame?
多层索引DataFrame拆分实现方案
测试数据构建
对应测试数据的构建代码如下:
import pandas as pd data = { 'File':[1,1,2,2,3], 'Sheet':['Sheet 1','Sheet 1','Sheet 3','Sheet3','Sheet5'], 'Duration':[2,5,3,7,9], 'Cost':[7,5,8,9,3], 'Distance':[2,4,5,7,5] } df = pd.DataFrame(data) df.columns = [['Set X','Set X','Set Y','Set Y','Set Z'],['File','Sheet','Duration','Cost','Distance']]
构建完成的DataFrame为两层列索引结构,顶层为Set X/Set Y/Set Z三个分组,二级索引为具体字段名。
拆分代码实现
直接按列索引的顶层(level=0)做轴向分组即可拆分出独立子表,代码如下:
# 存储拆分后DataFrame的字典 result = {} # axis=1指定按列维度分组,level=0指定按顶层列索引值分组 for group_label, sub_df in df.groupby(level=0, axis=1): # 若需要子表仅保留二级列名(和预期展示效果一致)保留下面这行;需要保留多层索引可直接删除 sub_df.columns = sub_df.columns.droplevel(0) result[group_label] = sub_df # 提取三个独立DataFrame set_x_df = result['Set X'] # 包含File、Sheet两列数据 set_y_df = result['Set Y'] # 包含Duration、Cost两列数据 set_z_df = result['Set Z'] # 包含Distance列数据
补充说明
- 该方法不需要硬编码列名,后续如果顶层分组有增减,代码也可以自动适配
- 拆分后的子表会保留原表的行索引,不需要额外做数据对齐操作
内容的提问来源于stack exchange,提问作者Win Yen Tham
相关产品推荐
相关产品推荐

