如何加入具有多索引的pandas数据帧

时间:2017-07-27 17:31:27

标签: pandas

问题描述

我有一个数据框,其中包含三级深度(0,1,2)的多索引,我希望将此数据框与另一个数据框连接,该数据框由我原始数据帧的第2级索引。

在代码中,我想转:

pd.DataFrame(['a', 'b', 'c', 'd']).transpose().set_index([0, 1, 2])

pd.DataFrame(['c', 'e']).transpose().set_index(0)

进入

pd.DataFrame(['a', 'b', 'c', 'd', 'e']).transpose().set_index([0, 1, 2])

我尝试了什么

  • 我已尝试使用swaplevel,然后join。虽然有些错误消息表明如果我能正确设置on,这可能会起作用,但是没有用。

  • 我尝试了concat,但也无法使其发挥作用。不确定它能不能工作......

注意:

我看过this question,答案似乎回答了问题(在解决问题时)。

1 个答案:

答案 0 :(得分:3)

如果索引级别的名称对齐,

join自然会为您执行此操作。您可以重命名第二个数据帧的索引,并相应地重命名d1 = pd.DataFrame(['a', 'b', 'c', 'd']).transpose().set_index([0, 1, 2]) d2 = pd.DataFrame(['c', 'e']).transpose().set_index(0) d1.join(d2.rename_axis(2)) 3 1 0 1 2 a b c d e

d1 = pd.DataFrame([
    [1, 2],
    [3, 4],
    [5, 6],
    [7, 8]
], pd.MultiIndex.from_product([['A', 'B'], ['X', 'Y']], names=['One', 'Two']))

d2 = pd.DataFrame([
    list('abcdefg')
], ['Y'], columns=list('ABCDEFG'))

d3 = pd.DataFrame([
    list('hij')
], ['A'], columns=list('HIJ'))

d1.join(d2.rename_axis('Two')).join(d3.rename_axis('One'))

         0  1    A    B    C    D    E    F    G    H    I    J
One Two                                                        
A   X    1  2  NaN  NaN  NaN  NaN  NaN  NaN  NaN    h    i    j
    Y    3  4    a    b    c    d    e    f    g    h    i    j
B   X    5  6  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
    Y    7  8    a    b    c    d    e    f    g  NaN  NaN  NaN

更全面的例子

{{1}}