基于两列合并Pandas DataFrame且避免生成_x、_y后缀的替代方案求解
解决方案
你可以通过先删除df1中原有Place列再合并的方式,完全避免生成带_x/_y后缀的中间列,一行代码即可实现和你需求完全一致的结果:
# df1、df2的定义保持不变 df_merge = df1.drop(columns='Place').merge(df2, on=['Month', 'Temp'], how='left').fillna({'Place': 0})
其他场景补充
如果你后续有其他类似需求,需要匹配到的行用df2的Place值,未匹配的行保留df1原有Place值而非统一填0,可以用update方法实现,同样不会生成中间后缀列:
# 先将公共匹配列设为索引 df1_idx = df1.set_index(['Month', 'Temp']) df2_idx = df2.set_index(['Month', 'Temp']) # 用df2的数值覆盖df1匹配到的行 df1_idx.update(df2_idx) # 恢复普通列结构 df_merge = df1_idx.reset_index()
原代码逻辑说明
你原有代码中先执行fillna(0)再判断pd.isnull(x['Place_y'])的逻辑实际不会生效,因为所有NaN已经被替换为0,所以最终Place列实际完全取的是df2填充0后的值,和上述第一种方案逻辑完全一致。
内容的提问来源于stack exchange,提问作者A.M. Ducu
相关产品推荐
相关产品推荐

