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

基于另一DataFrame替换DataFrame列中的值

解决DataFrame中WorkerId的匹配替换问题

问题描述

我有两个DataFrame:

df1
PRA_Kod;WorkerId
1049;9024
0014;60260
0608;10506
20270/9;20270
9511;64473
0639;60264
0767;10509
.. .. .. . .
df2
WorkerId;Day;Time;W
1049;11;u.wyp;WE
1049;14;u.wyp;WE
64454;11;u.wyp;WE
0014;15;u.wyp;WE
64471;12;u.wyp;WE
64471;13;u.wyp;WE
0639;06;u.wyp;WE
0639;01;u.wyp;WE
0639;02;u.wyp;WE
0639;03;u.wyp;WE
64465;04;u.wyp;WE
64465;05;u.wyp;WE
 ... ... .. .

需求:若df2['WorkerId']的值存在于df1['PRA_Kod']中,则将df2['WorkerId']替换为对应的df1['WorkerId']值。
注:PRA_Kod中的值"20270/9"并非输入错误,这是不同表合并后的结果,部分用户在不同表中有不同索引。

期望输出:

df_result
WorkerId;Day;Time;W
9024;11;u.wyp;WE
9024;14;u.wyp;WE
64454;11;u.wyp;WE
60260;15;u.wyp;WE
64471;12;u.wyp;WE
64471;13;u.wyp;WE
60264;06;u.wyp;WE
60264;01;u.wyp;WE
60264;02;u.wyp;WE
60264;03;u.wyp;WE
64465;04;u.wyp;WE
64465;05;u.wyp;WE
... ... .. .

我尝试的代码抛出了ValueError: Can only compare identically-labeled Series objects.错误:

df_result.loc[ df2['WorkerId'].eq == df1['PRA_Kod'].eq, 
               df2['WorkerId']                         ] = df1['WorkerId']

解决方案

你报错的原因是直接对两个长度、索引都不一致的Series用eq比较,无法完成匹配。正确做法是先构建映射关系,再批量替换,以下是两种简洁的实现方式:

方法一:使用字典映射 + map

  1. 从df1生成PRA_Kod到WorkerId的映射字典:
pra_worker_map = df1.set_index('PRA_Kod')['WorkerId'].to_dict()
  1. 对df2的WorkerId进行替换,未匹配的值保留原样:
df2['WorkerId'] = df2['WorkerId'].map(pra_worker_map).fillna(df2['WorkerId'])

方法二:直接使用replace

replace方法可以直接接收字典作为参数,自动替换匹配的键,未匹配的值保持不变,代码更简洁:

pra_worker_map = df1.set_index('PRA_Kod')['WorkerId'].to_dict()
df2['WorkerId'] = df2['WorkerId'].replace(pra_worker_map)

代码说明

  • set_index('PRA_Kod')['WorkerId'].to_dict():将df1的PRA_Kod作为键,对应的WorkerId作为值生成字典,实现快速查找匹配。
  • map(pra_worker_map):遍历df2的每个WorkerId,用字典中的值替换匹配项,未匹配项会变为NaN,后续用fillna还原原值。
  • replace(pra_worker_map):直接替换字典中存在的键值对,无需额外处理空值,逻辑更直观。

处理完成后,df2就是你需要的df_result。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:37:15