如何匹配不同DataFrame的姓名并替换df1的职业列值?
解决方案
步骤1:从df2中提取需要更新的姓名列表
df2的Name-empid列是姓名与员工ID的组合,首先要拆分出纯姓名部分,得到需要匹配的姓名集合:
# 拆分Name-empid列,提取姓名部分 target_names = df2['Name-empid'].str.split('-', n=1).str[0].tolist()
如果姓名中可能包含连字符(本例无此情况),用正则提取更稳妥:
target_names = df2['Name-empid'].str.extract(r'^([^-]+)')[0].tolist()
步骤2:在df1中匹配姓名并替换职业
用isin()方法定位df1中姓名在目标列表里的行,直接修改profession列的值:
# 匹配目标姓名,替换对应的profession df1.loc[df1['Name'].isin(target_names), 'profession'] = 'data scientist'
处理后的df1结果
执行后df1数据如下:
| Name | profession |
|---|---|
| srinu | senior engineer |
| Azahar | engineer |
| vijaya | data scientist |
| rahul | data scientist |
| swapna | manager |
| krishna | data scientist |
| rama | data scientist |
关于map/replace报错的原因
你之前用map或replace出错,核心原因是没先处理df2的Name-empid列——直接用带员工ID的字符串去和df1的纯姓名匹配,格式不对应,导致映射或替换逻辑无法生效。先提取纯姓名再匹配,就能避免这个问题。
内容的提问来源于stack exchange,提问作者nikhil
相关产品推荐
相关产品推荐

