如何在不合并索引的情况下连接具有不同多索引的两个数据框?

时间:2020-02-11 23:28:29

标签: python pandas dataframe concatenation

我有两个数据框。每个都有一个二级多索引。每个级别的第一级相同,但是第二级不同。我想将数据帧连接起来,最后得到一个具有三级多索引的数据帧,其中第一个数据帧的记录在第三索引级别将具有“ NaN”,而第二个数据帧的记录将具有“ NaN”在第二个索引级别。取而代之的是,我得到了一个具有两级索引的数据框,其中每个数据框的第二级中的值都放在了相同的索引级中,该索引级采用了第一个数据帧中第二级的名称(请参见下面的代码)。

有没有很好的方法可以做到这一点?我可以将每个索引的第二级放入列中,然后将它们放回索引中,但这对我来说似乎是一种seems回的方式。

df1 = pd.DataFrame({'index-1':['a1','b1','c1','d1'], 'index-2':['a2','b2','c2','d2'], 'values':[1,2,3,4]})
df2 = pd.DataFrame({'index-1':['a1','b1','c1','d1'], 'index-3':['a3','b3','c3','d3'], 'values':[5,6,7,8]})

df1.set_index(['index-1','index-2'], inplace=True)
df2.set_index(['index-1','index-3'], inplace=True)

pd.concat([df1, df2])

谢谢!

1 个答案:

答案 0 :(得分:0)

在两个输入数据帧上重置索引,合并它们,然后再次设置索引会更容易:

pd.concat([df1.reset_index(), df2.reset_index()], sort=False) \
    .set_index(['index-1', 'index-2', 'index-3'])

结果:

                         values
index-1 index-2 index-3        
a1      a2      NaN           1
b1      b2      NaN           2
c1      c2      NaN           3
d1      d2      NaN           4
a1      NaN     a3            5
b1      NaN     b3            6
c1      NaN     c3            7
d1      NaN     d3            8