【问题标题】:How to get the union of two MultiIndex DataFrames?如何获得两个 MultiIndex DataFrames 的并集?
【发布时间】:2015-11-01 16:16:37
【问题描述】:

如何合并两个 MultiIndexed DataFrame?

例如,假设我有:

index1 = pd.MultiIndex.from_tuples([('2010-01-01', 'Jim'),
                                    ('2010-01-01', 'Mike'), 
                                    ('2010-01-02', 'Sam')])
index2 = pd.MultiIndex.from_tuples([('2010-01-02', 'Jim'), 
                                    ('2010-01-02', 'Sam'), 
                                    ('2010-01-03', 'Joe')])
df1 = pd.DataFrame([[7,0,7],[4,3,2],[6,2,6]], 
                   index=index1, columns=['a', 'b', 'c'])
df2 = pd.DataFrame([[4,2,0],[8,8,4],[5,5,3]], 
                   index=index2, columns=['a', 'b', 'c'])

这会导致:

>> df1
                  a  b  c
2010-01-01  Jim   7  0  7
            Mike  4  3  2
2010-01-02  Sam   6  2  6

>> df2
                  a  b  c
2010-01-02  Jim   4  2  0
            Sam   8  8  4
2010-01-03  Joe   5  5  3

我想合并df1df2来产生:

>> df3
                    a1  b1  c1  a2  b2  c2
2010-01-01  Jim     7   0   7   NaN NaN NaN
            Mike    4   3   2   NaN NaN NaN
2010-01-02  Jim     NaN NaN NaN 4   2   0
            Sam     6   2   6   8   8   4
2010-01-03  Joe     NaN NaN NaN 5   5   3

我正在努力寻找一个好的方法来做到这一点。有什么建议吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    试试:

    df3 = df1.join(df2, how='outer', lsuffix='1', rsuffix='2')
    

    或者

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

    【讨论】:

    • 第一个语句给出了错误 (ValueError: columns overlap but no suffix specified: Index(['a', 'b', 'c'], dtype='object')),但第二个语句有效!
    • 更改第一个以包含lsuffix='1', rsuffix='2'。我监督了这一点。另外,如果您满意,请接受我的回答。
    • 我在写第一条评论时点击了绿色复选标记。我还需要做些什么吗?
    • 没有。这就是你需要做的。谢谢!不客气。
    猜你喜欢
    • 2018-01-29
    • 2015-12-27
    • 2018-05-16
    • 2019-08-27
    • 2013-07-13
    • 1970-01-01
    • 2020-12-24
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多