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

如何用另一数据集替换某列指定值且保留原数据集其他值?

Pandas 用匹配数据集替换指定列值的解决方案

原始数据集

df1 代码及输出

import pandas as pd
df1 = pd.DataFrame()
df1['number'] = [0,0,0,0,0]
df1["decade"] = ["1970", "1980", "1990", "2000", "2010"]

print(df1)

输出:

number decade
0       0   1970
1       0   1980
2       0   1990
3       0   2000
4       0   2010

df2 代码及输出

df2 = pd.DataFrame()
df2['number'] = [1,1]
df2["decade"] = ["1990", "2010"]

print(df2)

输出:

number decade
0       1   1990
1       1   2010

需求

用df2中与decade匹配的number值,替换df1对应行的number,保留df1未匹配行的原始值,最终结果如下:

number decade
0       0   1970
1       0   1980
2       1   1990
3       0   2000
4       1   2010

实现方案

以下是三种高效可行的方法:

方法1:使用update()直接修改原数据集

update()会基于索引匹配,将df2的对应值覆盖到df1上:

# 将两个数据集的索引设置为decade,确保匹配逻辑正确
df2.set_index('decade', inplace=True)
df1.set_index('decade', inplace=True)

# 执行替换
df1.update(df2)

# 恢复原索引结构
df1.reset_index(inplace=True)
print(df1)

方法2:使用combine_first()生成新数据集

该方法优先取df2的有效值,无匹配时保留df1的原始值,适合不想修改原数据的场景:

# 分别设置索引为decade
df1_idx = df1.set_index('decade')
df2_idx = df2.set_index('decade')

# 合并并恢复索引
result = df2_idx.combine_first(df1_idx).reset_index()
print(result)

方法3:字典映射替换(灵活通用)

先将df2转换为decade: number的字典,再通过map()完成替换,未匹配值用fillna()保留原值:

# 构建decade到number的映射字典
decade_number_map = df2.set_index('decade')['number'].to_dict()

# 替换df1的number列,未匹配项保留原始值
df1['number'] = df1['decade'].map(decade_number_map).fillna(df1['number']).astype(int)
print(df1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:15:32