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

Pandas中移除多层表头的重复列

问题

我通过df = pd.read_excel('data.xlsx', header=[0, 1], sheet_name='Sheet1')读取了Excel文件,原始数据如下:

name cpi icpi CPI
         freq M D M
0 2021-02-21 -9.8 31.524 9.806
1 2021-02-22 -5.6 30.777 9.164
2 2021-02-23 3.5 29.318 7.841
3 2021-02-24 -1.1 29.209 7.570
4 2021-02-25 -2.7 29.074 7.467

需求是:将双层表头中第二层(freq层)值重复的列删除(比如示例中cpi和CPI的第二层都是M,保留其中一列),最终得到如下结果:

name  cpi    icpi
        freq    M       D
0 2021-02-21 -9.8  31.524
1 2021-02-22 -5.6  30.777
2 2021-02-23  3.5  29.318
3 2021-02-24 -1.1  29.209
4 2021-02-25 -2.7  29.074

执行以下代码可查看列结构:

print(df.columns.get_level_values(0))
print(df.columns.to_flat_index())

输出结果:

Index(['name', 'cpi', 'icpi', 'CPI'], dtype='object')
Index([('name', 'freq'), ('cpi', 'M'), ('icpi', 'D'), ('CPI', 'M')], dtype='object')

解决方案

实现步骤

  1. 标记重复列
    提取双层表头的第二层值,用duplicated()方法标记重复项,keep='first'表示保留首次出现的列,后续重复列标记为True:
dup_mask = df.columns.get_level_values(1).duplicated(keep='first')
  1. 筛选非重复列
    通过布尔索引筛选出未被标记为重复的列,得到清理后的DataFrame:
df_cleaned = df.loc[:, ~dup_mask]

完整代码

import pandas as pd

# 读取带双层表头的Excel数据
df = pd.read_excel('data.xlsx', header=[0, 1], sheet_name='Sheet1')

# 生成第二层表头的重复标记
dup_mask = df.columns.get_level_values(1).duplicated(keep='first')

# 筛选保留非重复列
df_cleaned = df.loc[:, ~dup_mask]

# 输出处理后的结果
print(df_cleaned)

内容的提问来源于stack exchange,提问作者ah bon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:30:22