2016-04-11 98 views
14

我有两个数据帧,每个数据帧都有两个索引列。我想合并它们。例如,第一个数据帧如下:在PANDAS索引中合并数据帧

     V1 

    A  1/1/2012 12 
      2/1/2012 14 
    B  1/1/2012 15 
      2/1/2012 8 
    C  1/1/2012 17 
      2/1/2012 9 

第二个数据框如下:

     V2 

    A  1/1/2012 15 
      3/1/2012 21    
    B  1/1/2012 24 
      2/1/2012 9 
    D  1/1/2012 7 
      2/1/2012 16 

和结果,我想获得如下:

     V1 V2 

    A  1/1/2012 12 15 
      2/1/2012 14 N/A 
      3/1/2012 N/A 21   
    B  1/1/2012 15 24 
      2/1/2012 8 9 
    C  1/1/2012 7 N/A 
      2/1/2012 16 N/A 
    D  1/1/2012 N/A 7 
      2/1/2012 N/A 16 

我已经尝试了几个版本usig pd.merge和.join,但似乎没有任何工作。你有什么建议吗?非常感谢你。

+0

尝试pd.concat ...这应该工作。 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html ..您可以选择您想要加入数据框的轴。 – Joey

回答

18

你应该能够使用join,这对指数为默认连接。根据您的预期结果,您必须使用outer作为连接类型。

>>> df1.join(df2, how='outer') 
      V1 V2 
A 1/1/2012 12 15 
    2/1/2012 14 NaN 
    3/1/2012 NaN 21 
B 1/1/2012 15 24 
    2/1/2012 8 9 
C 1/1/2012 17 NaN 
    2/1/2012 9 NaN 
D 1/1/2012 NaN 7 
    2/1/2012 NaN 16 

签名:_.join(其他上=无,如何= '左',lsuffix = '',rsuffix = '',排序= FALSE) 文档字符串: 加入与其他数据帧列索引或 列。高效地通过 传递一个列表,通过索引立即加入多个DataFrame对象。

+0

This Works,thank you! – km1234

5

你可以用merge做到这一点:

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

关键字参数how='outer'保留所有指数从两个框架,与NaN失踪指数填充。 left_indexright_index关键字参数在索引上进行合并。如果在合并后在列中获得所有NaN,则另一个故障排除步骤是验证您的索引是否具有相同的dtypes

上面的merge代码产生以下输出对我来说:

   V1 V2 
A 2012-01-01 12.0 15.0 
    2012-02-01 14.0 NaN 
    2012-03-01 NaN 21.0 
B 2012-01-01 15.0 24.0 
    2012-02-01 8.0 9.0 
C 2012-01-01 17.0 NaN 
    2012-02-01 9.0 NaN 
D 2012-01-01 NaN 7.0 
    2012-02-01 NaN 16.0 
+0

这也适用,谢谢! – km1234