用熊猫合并索引上的数据框


76

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

                   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

我使用pd.merge.join方法尝试了一些版本,但似乎没有任何效果。你有什么建议吗?


尝试pd.concat ...这应该工作。pandas.pydata.org/pandas-docs/stable/generated/… ..您可以选择要连接数据的轴。
乔伊

Answers:


95

您应该能够使用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(其他,on =无,how ='left',lsuffix ='',rsuffix ='',sort = False)Docstring:在索引或键列上将列与其他DataFrame连接起来。通过传递列表,一次按索引有效地连接多个DataFrame对象。


56

您可以使用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

1
有用的解释和比接受的解释更通用的解决方案。当然,提及join()也是有用的。
RockyRoad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.