首页 > 解决方案 > 如何在没有 for 循环或合并的情况下根据另一个“更正”数据帧替换一个数据帧中的字符串值

问题描述

假设我有两个 DataFrame,一个“原始”和“更正”数据框,这样

orig = pd.DataFrame({'Name':['A','B'],'Code':['9q8','7k2']})

Name Code
A    9q8
B    7k2

corr = pd.DataFrame({'Name':['A',],'Code':['9R8',]})
Name Code
A    9R8

如何在不合并或迭代 corr 中的每个更正然后在 orig 中的每个原始文件的情况下分配orig['Code']=corr['Code']任何位置?orig['Name']==corr['Name]最终结果应如下所示:

Name Code
A    9R8
B    7k2

我确实看到了另一个类似于我当前问题的堆栈溢出帖子,但在该示例中,答案使用了合并,然后使用了选择机制来摆脱不再需要的旧行。但是,我没有这样的选择机制。

例如,如果我合并 orig 和 corr,我得到:

out = pd.merge(orig,corr,on='Name',how='outer')
Name Code
A    9q8
A    9R8
B    7k2

哪个,如果我查看数千行,让我无法知道哪个 A 9q8A 9R8哪个是替换,哪个不是。我不能使用指示符列来区分替换和非替换,因为删除所有“仅左”的条目也会删除该条目B 7k2

标签: pythonpandasdataframe

解决方案


orig.set_index('Name',inplace=True)
orig.update(corr.set_index('Name'))

orig.reset_index(inplace=True)
orig
Out[164]: 
  Name Code
0    A  9R8
1    B  7k2

推荐阅读