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

基于共同key合并两个DataFrame并更新填充值的实现方法

pandas 基于key合并并冲突替换的实现方法

要实现基于"key"列合并两个DataFrame,冲突列用右侧值替换左侧,同时填充右侧新列的需求,可以按以下步骤操作:

示例数据

首先定义你的两个DataFrame:

import pandas as pd
import numpy as np

left = pd.DataFrame(
{   "key": ["K0", "K1", "K2", "K3"],
    "A": ["A0", "A1", "A2", "A3"],
    "C": ["B0", "B1", np.nan, np.nan]})

right = pd.DataFrame(
{   "key": ["K2"],
    "A": ["A8"], 
    "D": ["D3"]})

解决方案

这里提供两种简洁的实现方式:

方法一:利用merge+combine_first

先通过外连接合并两个DataFrame,再对冲突列进行值替换:

# 外连接合并,给右侧重复列加后缀
merged = pd.merge(left, right, on='key', how='outer', suffixes=('', '_right'))

# 对冲突列A,优先使用右侧的值,没有则保留左侧原有值
merged['A'] = merged['A_right'].combine_first(merged['A'])

# 删除多余的后缀列,整理列顺序
result = merged.drop(columns=['A_right'])[['key', 'A', 'C', 'D']]

方法二:利用索引匹配+update

将两个DataFrame以key为索引,通过update直接替换冲突值,再合并新列:

# 将DataFrame设置为key索引
left_idx = left.set_index('key')
right_idx = right.set_index('key')

# 复制左侧DataFrame,用右侧值更新冲突列(仅替换右侧有值的部分)
result = left_idx.copy()
result.update(right_idx)

# 合并右侧的新列D,保留所有行
result = result.join(right_idx[['D']], how='left')

# 重置索引恢复key列为普通列
result = result.reset_index()[['key', 'A', 'C', 'D']]

最终结果

两种方法都能得到你期望的输出:

key   A    C    D
0  K0  A0   B0  NaN
1  K1  A1   B1  NaN
2  K2  A8  NaN  D3
3  K3  A3  NaN  NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:30:59