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

如何实现DataFrame的合并更新(类似dict.update()逻辑)

问题描述

现有两个列结构相同但行数据不同的DataFrame:

df1 = pd.DataFrame({'key': ['a', 'A'], 'value': [1, 1]})
df2 = pd.DataFrame({'key': ['A', 'B'], 'value': [5, 6]})

df1数据:

key   value
a     1
A     1

df2数据:

key   value
A     5
B     6

期望得到结果df3:

key   value
a     1
A     5
B     6

需求逻辑类似Python的dict.update():若键已存在则更新对应值,若不存在则新增键值对。实际场景中有2个键列和10+个值列,不希望处理合并后自动生成的_x/_y后缀,求实现方法。

解决方案

方法一:合并后去重(直观易扩展)

通过concat合并两个DataFrame,再根据键列去重,保留最后出现的行(即df2的更新值):

import pandas as pd

# 示例数据
df1 = pd.DataFrame({'key': ['a', 'A'], 'value': [1, 1]})
df2 = pd.DataFrame({'key': ['A', 'B'], 'value': [5, 6]})

# 多键列场景下,subset传入所有键列名即可,比如['key1', 'key2']
df3 = pd.concat([df1, df2]).drop_duplicates(subset=['key'], keep='last').reset_index(drop=True)

方法二:索引匹配更新

将键列设为索引,利用combine_first实现“后覆盖前、缺值补充”的逻辑:

import pandas as pd

df1 = pd.DataFrame({'key': ['a', 'A'], 'value': [1, 1]})
df2 = pd.DataFrame({'key': ['A', 'B'], 'value': [5, 6]})

# 多键列场景下,set_index传入所有键列名,比如set_index(['key1', 'key2'])
df1_idx = df1.set_index('key')
df2_idx = df2.set_index('key')

# df2的数据优先,df1中独有的键保留原数据
df3 = df2_idx.combine_first(df1_idx).reset_index()

两种方法都无需处理_x/_y后缀,完美适配多键列、多值列的场景,完全符合dict.update()的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:40:11