如何解决在 df2 中从 df1 中找到一个值并替换匹配行的其他值
import pandas as pd
data = {'Name': ['Name1','Name2','Name3','Name4','Name5'],'Number': ['456','A977','132a','6783r','868354']}
replace = {'NewName': ['NewName1','NewName3','NewName4','NewName5','NewName2'],'ID': ['I753','25552','868354','A977']}
df1 = pd.DataFrame(data,columns = ['Name','Number'])
df2 = pd.DataFrame(replace,columns = ['NewName','ID'])
现在我想将 df1 的“Number”列中的每个项目与 df2 的“ID”列中的每个项目进行比较。如果有匹配,我想用df2的'NewName'替换df1的'Name',否则应该保留df1的'Name'。
首先我尝试了以下代码,但不幸的是它混合了不同行中的名称和数字。
df1.loc[df1['Number'].isin(df2['ID']),['Name']] = df2.loc[df2['ID'].isin(df1['Number']),['NewName']].values
我尝试的下一个代码工作得更好,但如果没有匹配,它将用 df1 的“编号”替换 df1 的“名称”。
df1['Name'] = df1['Number'].replace(df2.set_index('ID')['NewName'])
如何在我的上一个代码中阻止这种行为,或者一般有没有更好的方法来实现我想要做的事情?
解决方法
您可以使用 map
而不是 replace
将 Number
中 df1
列中的每个值替换为 {{ 中 NewName
列中的相应值1}} 然后 fill
df2
值 (不能被替换的值) 映射列中的 NaN
列中的原始值{{ 1}}:
Name
df1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。