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

Pandas重命名列后合并同名列的实现方案咨询

实现方案

你需要将重命名后重复列的所有值纵向拼接,其余列在原有值后补对应数量的-即可,具体实现代码如下:

import pandas as pd

# 原有基础代码
df = pd.DataFrame({'Col_1': ['A', 'B', 'C'],
                   'Col_2': ['D', 'E', 'F'],
                   'Col_one':['G', 'H', 'I'],})
df.rename(columns={'Col_one' : 'Col_1'}, inplace=True)

# 合并逻辑
# 1. 拼接所有Col_1列的取值
col1_all = pd.concat([df['Col_1']], ignore_index=True).tolist()
# 2. 其他列补'-'至相同长度
target_len = len(col1_all)
col2_all = df['Col_2'].tolist() + ['-'] * (target_len - len(df))
# 3. 生成最终DataFrame
result = pd.DataFrame({
    'Col_1': col1_all,
    'Col_2': col2_all
})

# 验证输出
print(result.to_dict('list'))

运行后输出完全符合预期:

{'Col_1': ['A', 'B', 'C', 'G', 'H', 'I'], 'Col_2': ['D', 'E', 'F', '-', '-', '-']}

如果存在多个重复列、多个普通列的场景,可以使用通用适配代码:

# 统计各列名出现次数
col_cnt = df.columns.value_counts()
merge_cols = col_cnt[col_cnt > 1].index
other_cols = col_cnt[col_cnt == 1].index

res_dict = {}
# 处理需要合并的列
for col in merge_cols:
    res_dict[col] = pd.concat([df[col] for _ in range(col_cnt[col])], ignore_index=True).tolist()

# 处理其余列
length = len(res_dict[merge_cols[0]])
for col in other_cols:
    res_dict[col] = df[col].tolist() + ['-']*(length - len(df))

result = pd.DataFrame(res_dict)

之前用pd.concat未得到预期结果的原因是你应该调用时用了axis=1横向拼接,这种方式只会保留重复列、按行索引对齐数据,不会自动把同名列的取值纵向堆叠,因此不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 12:54:03