Заменить совпадающие значения в столбце - PullRequest
0 голосов
/ 23 октября 2019

У меня есть 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     |  

Моя цель - изменить имена в 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 ]

2 голосов
/ 23 октября 2019

Использование 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 голос
/ 23 октября 2019

Используйте Series.map со столбцом ID, а затем замените отсутствующие значения на исходные значения на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...