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

如何拼接含重复列名的pandas DataFrame并按规则重命名重复列

可复现示例数据
import pandas as pd
import numpy as np

cols1=['b','a','c','a']
data1=[0,0,0,0]
df1=pd.DataFrame([data1], columns= cols1)
df1

cols2=['b','a', 'd', 'a', 'e','f']
data2=[1,1,1,1,1,1]
df2=pd.DataFrame([data2], columns= cols2)
df2
预期运行结果
data = { "b": [0, 1],
        "b a" : [0, 1],
        "c" : [0, np.NaN],
        "c a" : [0, np.NaN],
       "d" : [np.NaN, 1],
       "d a" : [np.NaN, 1],
       "e" : [np.NaN, 1],
       "f" : [np.NaN, 1]}
pd.DataFrame(data)
问题描述

当DataFrame存在重复列名a时,直接调用pd.concat()无法完成符合预期的拼接操作。重命名规则要求:所有名为a的重复列,都以其紧邻前一列的列名为前缀,重命名为{前序列名} a的格式。

解决方案

核心思路是先按规则把所有待拼接DataFrame的列名处理为唯一值,再执行拼接,全程使用pandas原生方法即可,无额外依赖。

  1. 编写通用列名处理函数,遍历列序列完成重命名:遇到列名为a的位置,自动取前一列列名拼接为新列名,其余列保留原名,保证处理后单个DataFrame内无重复列名。
  2. 对所有待拼接的DataFrame统一应用重命名逻辑。
  3. 直接调用pd.concat()做纵向拼接,pandas会自动按列名对齐,不存在的列自动填充NaN。

完整实现代码:

def process_columns(df):
    raw_cols = df.columns.tolist()
    new_cols = []
    for idx, col_name in enumerate(raw_cols):
        if col_name == "a":
            new_cols.append(f"{raw_cols[idx-1]} a")
        else:
            new_cols.append(col_name)
    return df.set_axis(new_cols, axis=1)

# 预处理两个DataFrame的列名
df1_processed = process_columns(df1)
df2_processed = process_columns(df2)

# 拼接得到最终结果
result = pd.concat([df1_processed, df2_processed], ignore_index=True)

运行上述代码得到的结果和预期输出完全一致。
这个方案的优势:

  • 逻辑严格匹配重命名规则,无需硬编码特定列名,不管a列前紧邻的是b、c还是其他列名都能自动适配
  • 纯pandas原生实现,性能稳定,大体积数据集也能快速处理
  • 扩展性强,后续如果需要处理其他重复列,只需要修改函数内的列名判断条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:54:09