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

