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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:03:23