合并具有不等长度的多索引数据帧

时间:2016-11-04 21:33:07

标签: python pandas merge multi-index

这是我的两个数据帧

index = pd.MultiIndex.from_product([['a','b'],[1,2]],names=['one','two'])
df = pd.DataFrame({'col':[10,20,30,40]}, index = index)
df
          col
 one two     
 a   1     10
     2     20
 b   1     30
     2     40

index_1 = pd.MultiIndex.from_product([['a','b'],[1.,2],['abc','mno','xyz']], names = ['one','two','three'])
temp =  pd.DataFrame({'col1':[1,2,3,4,5,6,7,8,9,10,11,12]}, index = index_1)
temp
                col1
 one two three      
  a   1.0 abc       1
          mno       2
          xyz       3
      2.0 abc       4
          mno       5
          xyz       6
  b   1.0 abc       7
          mno       8
          xyz       9
      2.0 abc      10
          mno      11
          xyz      12

如何合并它们? 我试过了,这个

pd.merge(left = temp, right = df, left_on = temp.index.levels[0], right_on = df.index.levels[0])

但这不起作用

KeyError: "Index([u'a', u'b'], dtype='object', name=u'one') not in index"

如果我通过reset_index()将索引转换为列,而不是合并工作。但是,我希望在保留索引结构的同时实现这一目标。

我想要的输出是:

enter image description here

1 个答案:

答案 0 :(得分:1)

方法1
reset_index + merge

df.reset_index().merge(temp.reset_index()).set_index(index_1.names)

方法2
具有join部分

reset_index
df.join(temp.reset_index('three')).set_index('three', append=True)

enter image description here