【问题标题】:Merging dataframes on index with pandas将索引上的数据框与熊猫合并
【发布时间】:2016-08-01 00:43:06
【问题描述】:

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

                   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 方法尝试了几个版本,但似乎没有任何效果。你有什么建议吗?

【问题讨论】:

标签: python pandas merge dataframe


【解决方案1】:

您应该可以使用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(other, on=None, how='left', lsuffix='', rsuffix='', sort=False) 文档字符串: 在索引或键上将列与其他 DataFrame 连接 柱子。通过索引一次有效地连接多个 DataFrame 对象 传递一个列表。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 有用的解释和比公认的更通用的解决方案。当然,提及join() 也很有用。
    猜你喜欢
    • 2012-12-18
    • 2018-02-02
    • 2019-03-18
    • 1970-01-01
    • 2021-03-25
    • 2020-10-31
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多