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
我想用左连接进行合并,但也存储未合并的右值。
例如
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