连接2 df包括所有索引值

时间:2017-11-23 22:34:17

标签: python pandas dataframe merge

我有2个dfs:

df1
           ponder     valor     
X         0.977011   145.000        
X         0.833333  -421.660    
Y         0.649425   1408.500          
W         0.609195   560.500         
Z         0.471264   132.300         
Y         0.431034 -1439.250          
X         0.321839   435.116 

df2
     sub_0
B     10
X     12  
C     16
Z     9

我想生成一个新的df,它连接与相应轴匹配的值,并添加df2df1中不存在的值,在这种情况下:BC

简而言之,所需的输出将如下所示:

           ponder     valor     sub_0
X         0.977011   145.000      12  
X         0.833333  -421.660      12
Y         0.649425   1408.500     Nan     
W         0.609195   560.500      Nan   
Z         0.471264   132.300      9  
Y         0.431034 -1439.250      Nan    
X         0.321839   435.116      12
B           Nan         Nan       10       
C           Nan         Nan       16

join函数的问题在于它只保留了join函数中声明的第一个df的索引值:

  sub_0   ponder    valor    
B   10    NaN      NaN
Z   9   0.609195  560.500
C   16    NaN      NaN
X   12  0.977011  145.000
X   12  0.321839  435.116
X   12  0.833333 -421.660

我如何获得所需的输出?

2 个答案:

答案 0 :(得分:2)

您可以对索引执行外部合并:

df1.merge(df2, left_index=True, right_index=True, how='outer')

     ponder     valor  sub_0
B       NaN       NaN   10.0
C       NaN       NaN   16.0
W  0.609195   560.500    NaN
X  0.977011   145.000   12.0
X  0.833333  -421.660   12.0
X  0.321839   435.116   12.0
Y  0.649425  1408.500    NaN
Y  0.431034 -1439.250    NaN
Z  0.471264   132.300    9.0

答案 1 :(得分:2)

如果订单很重要,您应该使用合并,否则,您可以使用combine_first

df1.combine_first(df2)
Out[273]: 
     ponder  sub_0     valor
B       NaN   10.0       NaN
C       NaN   16.0       NaN
W  0.609195    NaN   560.500
X  0.977011   12.0   145.000
X  0.833333   12.0  -421.660
X  0.321839   12.0   435.116
Y  0.649425    NaN  1408.500
Y  0.431034    NaN -1439.250
Z  0.471264    9.0   132.300

df1.join(df2,how='outer')
Out[282]: 
     ponder     valor  sub_0
B       NaN       NaN   10.0
C       NaN       NaN   16.0
W  0.609195   560.500    NaN
X  0.977011   145.000   12.0
X  0.833333  -421.660   12.0
X  0.321839   435.116   12.0
Y  0.649425  1408.500    NaN
Y  0.431034 -1439.250    NaN
Z  0.471264   132.300    9.0