Python 基于其他数据帧的值更新数据帧。这是一个传统的UPSERT任务,带有一个新的指示符列

Python 基于其他数据帧的值更新数据帧。这是一个传统的UPSERT任务,带有一个新的指示符列,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我试图在两个数据帧上执行UPSERT任务 这里我用df1更新df2 我用过这样的方法: 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

我试图在两个数据帧上执行UPSERT任务

这里我用df1更新df2

我用过这样的方法:

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


此外,我无法添加“指标”列

我这样做了,几乎实现了我的目标,但还有更好的方法吗?加上如何处理列插入

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


在您的示例中,Marie在第一个数据帧和第二个数据帧之间具有不同的名称。这就是例子的一部分吗?是的,尼科德尔甚至“山姆”都有不同的名字。这可被视为名称变更。基本上,索引可以是“EmpID”,其余一切都保持不变