替换列中的匹配值

时间:2019-10-23 10:51:49

标签: python pandas

我有一个带有
的dataframe_1  -ID;
 - 名称。

ID |  Name  |  
231| Jane   |
222| Alex   |  
345| Mary   |
367| Derek  |  

和dataframe_2与
 -ID;
 - 名称。

ID |  Name   |  
231| Samantha|
224| Debora  |  
345| Luis    |
367| Pit     |  

这样,结果数据框必须看起来像:

ID |  Name   |  
231| Samantha|
222| Alex    |  
345| Luis    |
367| Pit     |  

我的目标是通过匹配ID并保留所有其他名称,将DF1中的名称更改为DF2中的名称。

我尝试了什么:

ass['Name'] = ass['Name'].map(cab.set_index('ID')['Name'])   #got NaN instead Alex

dd = dict(zip(cab.ID,cab.Name)) 
ass = ass.replace({"Name": dd}) #nothing changed

但没有结果。

2 个答案:

答案 0 :(得分:2)

np.where一起使用pd.merge

df = df1.merge(df2, how='left', on="id")
df["name"] = np.where(df["name_y"].isnull(), df["name_x"], df["name_y"])
df.drop(["name_x","name_y"], axis=1, inplace=True)

输出:

  id      name
0  231  Samantha
1  222      Alex
2  345      Luis
3  367       Pit

答案 1 :(得分:1)

ID列中使用Series.map,然后用Series.fillna用原始值替换缺少的值:

df1['Name'] = df1['ID'].map(df2.set_index('ID')['Name']).fillna(df1['Name'])
print (df1)
    ID     Name
0  231  Samanth
1  222     Alex
2  345     Luis
3  367      Pit