【发布时间】:2021-02-18 14:07:26
【问题描述】:
我有以下代码和 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”列进行比较。如果匹配,我想将 df1 的“名称”替换为 df2 的“新名称”,否则应保留 df1 的“名称”。
首先我尝试了以下代码,但不幸的是它在不同的行中混合了名称和数字。
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'])
如何在我的上一个代码中阻止这种行为,或者一般有更好的方法来实现我想做的事情?
【问题讨论】:
标签: pandas dataframe replace compare