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')
解决方案
实现步骤
- 标记重复列
提取双层表头的第二层值,用duplicated()方法标记重复项,keep='first'表示保留首次出现的列,后续重复列标记为True:
dup_mask = df.columns.get_level_values(1).duplicated(keep='first')
- 筛选非重复列
通过布尔索引筛选出未被标记为重复的列,得到清理后的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
相关产品推荐
相关产品推荐

