我有以下带有2个数据帧的代码(df1和df2)
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', '6783r', '868354', 'A977']}
df1 = pd.DataFrame(data, columns = ['Name', 'Number'])
df2 = pd.DataFrame(replace, columns = ['NewName', 'ID'])
现在,我想将df1的“数字”列中的每个项目与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'])
如何在我的上一个代码中停止这种行为,或者通常有更好的方法实现我想做的事情?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句