Python 基于其他数据帧的值更新数据帧。这是一个传统的UPSERT任务,带有一个新的指示符列
我试图在两个数据帧上执行UPSERT任务 这里我用df1更新df2 我用过这样的方法: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
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”,其余一切都保持不变