首页 > 解决方案 > 在保留所有列的同时合并 2 个熊猫数据框

问题描述

我正在尝试合并 2 个熊猫数据框。他们看起来像

DF1

col1        col2          col3           col4           col5
A            SAT           MON            5               3
B            MON           FRI            -1              2
C            FRI           TUE            8               4
D            TUE           WED            2               4

DF2

col1        col2          col3           col4           col5
A            SAT           MON            5               3
B            MON           FRI            -1              2
C            WED           THUR           8               4
D            THUR          SAT            2               4

想要的结果

col1        col2          col3           col4           col5        col1_2          col2_2        col3_2          col4_2        col5_2                
A            SAT           MON            5               3           A            SAT           MON            5               3
B            MON           FRI            -1              2           B            MON           FRI            -1              2
C            FRI           TUE            8               4
D            TUE           WED            2               4
                                                                      C            WED           THUR           8               4
                                                                      D            THUR          SAT            2               4                                                                              

我使用过merged_df = df1.merge(df2, on=['col1','col2','col3'], how='outer'),但它给了我以下结果,这是我所期望的,但不想要。我想要类似上面的结果。反正有没有得到我的预期结果?

结果

col1        col2          col3           col4           col5
A            SAT           MON            5               3
B            MON           FRI            -1              2
C            FRI           TUE            8               4
D            TUE           WED            2               4
C            WED           THUR           8               4
D            THUR          SAT            2               4

标签: pythonpandas

解决方案


尝试combine_first

l=['col1','col2','col3']
df = df1.set_index(l).combine_first(df2.set_index(l)).reset_index()
df
Out[28]: 
  col1  col2  col3  col4  col5
0    A   SAT   MON   5.0   3.0
1    B   MON   FRI  -1.0   2.0
2    C   FRI   TUE   8.0   4.0
3    C   WED  THUR   8.0   4.0
4    D  THUR   SAT   2.0   4.0
5    D   TUE   WED   2.0   4.0

推荐阅读