Обновите фрейм данных на основе значений из other . Это традиционная задача UPSERT с новым столбцом индикатора

#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