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

如何在Python中合并两个DataFrame,保留左表所有行并更新指定列

Python合并DataFrame:用右表E列覆盖左表对应值的实现方法

你需要保留左表(Table 1)所有行,并用右表(Table 2)的E列值覆盖左表对应行的E列,用pd.merge的话需要处理合并后的重复列,或者用更高效的update方法,以下是两种可行方案:

示例数据

Table 1:

A   B   C   D   E
1   mm  nn  oo  12
2   aa  bb  cc  12
3   xx  yy  zz  12
4   jj  kk  ll  12
5   rr  ss  tt  12
6   gg  hh  ii  12

Table 2:

A   B   C   D   E
2   aa  bb  cc  5
3   xx  yy  zz  5
4   jj  kk  ll  5

预期结果:

A   B   C   D   E
1   mm  nn  oo  12
2   aa  bb  cc  5
3   xx  yy  zz  5
4   jj  kk  ll  5
5   rr  ss  tt  12
6   gg  hh  ii  12

方案一:左连接后处理列

用pd.merge左连接两个表,指定连接键为A/B/C/D,合并后会生成E_x(左表的E)和E_y(右表的E),再通过fillna用E_y覆盖E_x,最后删除多余列:

import pandas as pd

# 构造示例DataFrame
df1 = pd.DataFrame({
    'A': [1,2,3,4,5,6],
    'B': ['mm','aa','xx','jj','rr','gg'],
    'C': ['nn','bb','yy','kk','ss','hh'],
    'D': ['oo','cc','zz','ll','tt','ii'],
    'E': [12]*6
})

df2 = pd.DataFrame({
    'A': [2,3,4],
    'B': ['aa','xx','jj'],
    'C': ['bb','yy','kk'],
    'D': ['cc','zz','ll'],
    'E': [5]*3
})

# 左连接,指定连接键
merged = pd.merge(df1, df2, on=['A','B','C','D'], how='left')
# 用右表E值覆盖左表,空值保留原左表值
merged['E'] = merged['E_y'].fillna(merged['E_x'])
# 删除多余列
result = merged.drop(columns=['E_x', 'E_y'])

print(result)

方案二:用update方法高效更新

update方法会直接用右表的非空值更新左表,需要先将两个表的连接键设为索引,更新后再重置索引:

import pandas as pd

# 构造示例DataFrame
df1 = pd.DataFrame({
    'A': [1,2,3,4,5,6],
    'B': ['mm','aa','xx','jj','rr','gg'],
    'C': ['nn','bb','yy','kk','ss','hh'],
    'D': ['oo','cc','zz','ll','tt','ii'],
    'E': [12]*6
})

df2 = pd.DataFrame({
    'A': [2,3,4],
    'B': ['aa','xx','jj'],
    'C': ['bb','yy','kk'],
    'D': ['cc','zz','ll'],
    'E': [5]*3
})

# 将连接键设为索引
df1.set_index(['A','B','C','D'], inplace=True)
df2.set_index(['A','B','C','D'], inplace=True)

# 用df2的E列更新df1的E列
df1['E'].update(df2['E'])

# 重置索引恢复原结构
result = df1.reset_index()

print(result)

两种方法都能得到你要的结果,方案一逻辑直观适合新手理解,方案二更适合处理大数据量的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:25:21