我有一个带有
的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
但没有结果。
答案 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