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

如何将pandas非重复列名作为后缀追加到对应重复列名上?

可行性说明

你提出的需求完全可以实现,你描述的遍历匹配逻辑本身就可以直接落地为通用代码,不需要提前指定任何子类别或重复表头的取值。

通用实现方案

核心思路是先自动识别重复出现的表头(也就是你提到的This Year这类周期表头),再通过遍历动态维护当前所属的子类别,拼接生成新列名:

import pandas as pd
from collections import Counter

def rename_duplicate_columns(df):
    # 统计所有列名的出现次数,自动识别重复表头
    col_counter = Counter(df.columns)
    repeat_header_set = {col for col, cnt in col_counter.items() if cnt > 1}
    
    current_category = ""
    new_cols = []
    # 按规则生成新列名
    for col in df.columns:
        if col not in repeat_header_set:
            # 遇到非重复的子类别表头,更新当前所属类别
            current_category = col
            # 如果原表中子类别对应的列是空占位列,不需要保留的话可以注释下一行
            # new_cols.append(col)
        else:
            # 重复表头拼接所属子类别
            new_cols.append(f"{current_category}: {col}")
    
    # 过滤掉原来的子类别占位列(如果不需要保留的话)
    df = df.loc[:, df.columns.isin(repeat_header_set)]
    # 应用新列名
    df.columns = new_cols
    return df

# 调用示例
df = rename_duplicate_columns(df)

更简化的实现方式(针对原始Excel场景)

如果你拿到的原始数据是带两级表头的Excel文件(第一行是子类别、第二行是周期),不需要先读成单列名再处理,读取阶段直接指定多级表头后拼接即可,代码更简洁:

# header参数指定前两行作为表头,读入后自动生成为MultiIndex格式的列
df = pd.read_excel("你的文件路径.xlsx", header=[0, 1])
# 直接拼接两级表头生成新列名
df.columns = [f"{category}: {period}" for category, period in df.columns]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:06