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

Pandas左连接同名列却自动加后缀,如何合并至对应列?

解决pd.merge左连接后同名列后缀问题

当你用pd.merge做左连接时,非连接键的同名列会被自动加上_x(左表)和_y(右表)后缀,要把右表的内容合并到左表对应列里,有两种实用方法:

方法一:先合并再手动合并同名列

先执行常规左连接,再遍历同名列,用右表的值填充左表空值,最后清理临时列:

import pandas as pd

# 定义连接键
join_keys = ['video_name', 'image_name']

# 找出除连接键外的同名列
common_cols = [col for col in penalty_kicks.columns 
               if col in backup.columns and col not in join_keys]

# 执行左连接,指定后缀区分
merged_df = pd.merge(penalty_kicks, backup, on=join_keys, how='left', suffixes=('_x', '_y'))

# 合并同名列:用backup的值填充penalty_kicks的空值
for col in common_cols:
    merged_df[col] = merged_df[f'{col}_x'].fillna(merged_df[f'{col}_y'])
    merged_df.drop([f'{col}_x', f'{col}_y'], axis=1, inplace=True)

方法二:用combine_first直接补充数据(更简洁)

这种方法更贴合左连接"用右表补充左表缺失数据"的需求,无需处理后缀:

# 按连接键设置索引,方便对齐数据
pk_indexed = penalty_kicks.set_index(join_keys)
backup_indexed = backup.set_index(join_keys)

# 优先保留左表数据,左表为空时用右表数据补充
merged_df = pk_indexed.combine_first(backup_indexed).reset_index()

注意:如果需要用右表数据覆盖左表对应值(不管左表是否为空),可以用pk_indexed.update(backup_indexed),但update会直接修改原DataFrame,建议先备份左表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:10:50