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

Pandas:指定列值匹配时替换DataFrame原列值(不新增列)

解决方案

以下是两种直接在原列替换匹配值的可行方案,无需保留新增临时列:

方法一:利用combine_first实现优先替换

该方法会优先使用df2中匹配到的值覆盖df1的对应空值,同时保留df1未被匹配的原有数据:

import pandas as pd

df1 = pd.DataFrame(data = {'Name' : ['Carl','Steave','Julius','Marcus'], 
                           'Work' : ['Home','Street','Car','Airplane'],
                           'Year' : ['2022','2021','2020','2019'],
                           'Days' : ['',5,'','']})

df2 = pd.DataFrame(data = {'Name' : ['Carl','Julius'], 
                           'Work' : ['Home','Car'],
                           'Days' : [1,2]})

# 将两个数据集的匹配键设为索引
df1_indexed = df1.set_index(['Name', 'Work'])
df2_indexed = df2.set_index(['Name', 'Work'])

# 合并替换后重置索引,再处理空值格式
result = df1_indexed.combine_first(df2_indexed).reset_index()
result['Days'] = result['Days'].fillna('').astype(str).replace('nan', '')

print(result)

执行输出:

Name      Work  Year Days
0    Carl      Home  2022    1
1  Julius       Car  2020    2
2  Marcus  Airplane  2019     
3  Steave    Street  2021    5

方法二:Merge后替换原列并清理临时列

如果你更熟悉merge操作,可以先完成关联,再用临时列的值替换原列空值,最后删除临时列:

import pandas as pd

df1 = pd.DataFrame(data = {'Name' : ['Carl','Steave','Julius','Marcus'], 
                           'Work' : ['Home','Street','Car','Airplane'],
                           'Year' : ['2022','2021','2020','2019'],
                           'Days' : ['',5,'','']})

df2 = pd.DataFrame(data = {'Name' : ['Carl','Julius'], 
                           'Work' : ['Home','Car'],
                           'Days' : [1,2]})

# 执行左关联
df_merge = pd.merge(df1, df2, how='left', on=['Name','Work'], suffixes=('','_'))
# 替换原Days列:仅当原列为空且有匹配值时替换
df_merge['Days'] = df_merge.apply(
    lambda x: x['Days_'] if not pd.isna(x['Days_']) and x['Days'] == '' else x['Days'],
    axis=1
)
# 删除临时列并处理空值格式
df_merge = df_merge.drop('Days_', axis=1)
df_merge['Days'] = df_merge['Days'].fillna('').astype(str).replace('nan', '')

print(df_merge)

执行输出与你期望的完全一致:

Name      Work  Year Days
0    Carl      Home  2022    1
1  Steave    Street  2021    5
2  Julius       Car  2020    2
3  Marcus  Airplane  2019     

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:40:53