Left Join,存储righouter值

2024-10-04 07:30:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用left join进行合并,但也要存储未合并的right值。你知道吗

例如

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)

这样,我就可以对\u merge列进行筛选,但它还提供: 值1×值1 对于每一个非关键列,我不确定有什么好的方法来清理它。你知道吗

提前谢谢


Tags: rightmergemergedleftpddf1df2key2
1条回答
网友
1楼 · 发布于 2024-10-04 07:30:21

您只需将key1和key2设置为index,然后使用combine_first,如果您需要key1和key2再次成为column,则在末尾添加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

相关问题 更多 >