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

Python pandas 带条件合并两个Dataframe的问题咨询

基于指定列匹配覆盖的Pandas DataFrame合并方案

pd.concat仅实现数据的直接堆叠,不会按指定列做行匹配,因此会产生重复的无效行,下述方案通过外连接+值优先级填充的逻辑实现指定规则的合并需求。

核心逻辑

以Source1、Target1、Source2、Target2作为共同匹配主键,优先保留DF2的行数据,未匹配到的DF1行保留原有值,最终输出包含两个表全部列的结果。

完整实现代码

import pandas as pd

# 定义匹配主键
match_keys = ["Source1", "Target1", "Source2", "Target2"]

# 给两个表非主键列加后缀区分,避免合并重名冲突
df1_suf = DF1.add_suffix("_df1").rename(columns={k+"_df1":k for k in match_keys})
df2_suf = DF2.add_suffix("_df2").rename(columns={k+"_df2":k for k in match_keys})

# 按主键外连接,保留两个表所有行和列
merged = pd.merge(df1_suf, df2_suf, on=match_keys, how="outer")

# 遍历所有列,优先取DF2的值,缺失值用DF1的值填充
all_cols = list(set(DF1.columns.tolist() + DF2.columns.tolist()))
for col in all_cols:
    if col in match_keys:
        continue
    merged[col] = merged.get(f"{col}_df2", pd.NA).fillna(merged.get(f"{col}_df1", pd.NA))

# 清理辅助列,重置索引得到最终结果
result = merged[all_cols].reset_index(drop=True)
print(result)

特性说明

  • 外连接规则确保两个表的所有行都不会丢失
  • 同名列取值优先级:DF2 > DF1,匹配到的DF1行数据会被DF2的对应值覆盖
  • 自动保留DF1和DF2的全部列,单个表独有的列未匹配到的位置会填充空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:45:03