如何将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
相关产品推荐
相关产品推荐

