Left Join,存储右外值Pandas Python

Left Join, storing right-outer values Pandas Python

我想用左连接进行合并,但也存储未合并的右值。

例如

df1:

key1 key2 val1 val2 val3
1     2   
1     1      
2     2        

df2:
key1 key2 val1 val2 val3
1     2    a    b    c
1     1    a    b    c   
3     2    a    b    c

我想要的:

merged
key1 key2 val1 val2 val3
1     2    a    b    c
1     1    a    b    c   
2     2 

saveForLater:
key1 key2 val1 val2 val3
3     2    a    b    c

我试过这样进行合并:

dfStore = pd.merge(dfStore, dfMap, how='outer', on=["key1", "key2"], indicator=True)

这让我可以在 _merge 列上进行过滤,但它还提供: val1_x val1_y 对于每个非关键列,我不确定清理它的好方法。

提前致谢

你可以只设置你的 key1 和 key2 到 index ,然后使用 combine_first,如果你需要 key1 和 key2 再次成为列,最后添加 reset_index()

df1=df1.set_index(['key1','key2'])
df2=df2.set_index(['key1','key2'])


df1.combine_first(df2.reindex(df1.index))
Out[711]: 
          val1 val2 val3
key1 key2               
1    2       a    b    c
     1       a    b    c
2    2     NaN  NaN  NaN


df2.loc[~df2.index.isin(df1.index)]
Out[712]: 
          val1 val2 val3
key1 key2               
3    2       a    b    c