pandas创建MultiIndex后移除重复索引列并拼接生成类Excel表方法
Pandas多级索引拼接实现类Excel合并单元格表格方案
核心问题修正逻辑
之前操作出现Results列重复的核心原因是:创建MultiIndex行索引时仅提取了Results列的值作为索引层级,但没有同步把Results列从普通列集合中移除。不需要用drop方法,直接在索引创建完成后筛选保留需要的业务列即可,完全不会触发两级列结构的异常。
完整可运行代码
import pandas as pd # 1. 构造原始基础数据表 dfDictionary = {'Results':['Home', 'Away', 'For', 'Against'], 'info':['-', '-','-','-',], 'rating':['-', '-','-','-',], 'review':['-', '-','-','-',]} dfTable1 = pd.DataFrame(dfDictionary) # 2. 处理dfTable1的多级行索引,不使用drop方法移除重复的Results列 dfTable1.index = pd.MultiIndex.from_arrays( [ ['Summary1'] * len(dfTable1), # 第一级行索引固定为Summary1分组 dfTable1['Results'].values # 第二级行索引取Results列的枚举值 ] ) # 直接筛选保留业务列,排除重复的Results列,全程不调用drop dfTable1 = dfTable1[['info', 'rating', 'review']] # 3. 按相同逻辑处理结构一致的dfTable2 dfTable2 = pd.DataFrame(dfDictionary) dfTable2.index = pd.MultiIndex.from_arrays( [ ['Summary2'] * len(dfTable2), dfTable2['Results'].values ] ) dfTable2 = dfTable2[['info', 'rating', 'review']] # 4. 纵向拼接两个处理完成的表 resultsTable = pd.concat([dfTable1, dfTable2], axis=0) # 5. 设置多级列头,实现类Excel合并单元格的顶部总表头效果 resultsTable.columns = pd.MultiIndex.from_product( [['Final Consolidated Table'], resultsTable.columns] )
最终效果说明
处理完成的表格完全符合预期:
- 行索引为两级结构:第一级是
Summary1/Summary2分组标签,第二级是Home/Away/For/Against结果类型,无重复的Results普通列 - 列索引为两级结构:第一级是统一的总表头
Final Consolidated Table,第二级是info/rating/review业务字段,在Jupyter Notebook等支持Pandas富文本渲染的环境中会自动展示为类似Excel合并单元格的样式 - 全流程未调用
drop方法,列结构从单级到两级的转换平滑,不会出现意外的多层级列异常
内容的提问来源于stack exchange,提问作者moys
相关产品推荐
相关产品推荐

