#python #python-3.x #pandas #dataframe
#python #python-3.x #pandas #фрейм данных
Вопрос:
Я пытаюсь выполнить задачу UPSERT для двух фреймов данных.
Здесь я обновляю df2 с помощью df1.
Я использовал что-то вроде этого:
final_df=df1.set_index('EmpID').combine_first(df2.set_index('EmpID'))
final_df.reset_index()
Мой результат здесь:
EmpID Name Salary Status
0 A John 1000.0 Left
1 B Mary 2000.0 Working
2 C Samie 3000.0 Left
3 D Doe 4000.0 NaN
4 E Lance 2500.0 Contractor
Также я не могу добавить столбец ‘Indicator’
Комментарии:
1. В вашем примере у Marie другое имя между первым и вторым фреймами данных. Это часть примера?
2. Да, у NickODell и даже у «Sam» другое имя. Это можно рассматривать как изменение имени. В принципе, индекс может быть «EmpID», все остальное остается прежним
Ответ №1:
Я сделал это и почти достиг своей цели, но есть ли лучший способ? плюс что делать с вставкой столбца?
df=pd.concat([df1, df2[~df2.EmpID.isin(df1.EmpID)]])
df=df.set_index('EmpID').join(df2.set_index('EmpID'),how='outer',rsuffix='_R')
df[['Name','Salary','Status_R']].reset_index()
EmpID Name Salary Status_R
0 A John 1000.0 Left
1 B Mary 2000.0 Working
2 C Samie NaN Left
3 D Doe 4000.0 NaN
4 E Lance 2500.0 Contractor