我有两个数据框。每个都有一个二级多索引。每个级别的第一级相同,但是第二级不同。我想将数据帧连接起来,最后得到一个具有三级多索引的数据帧,其中第一个数据帧的记录在第三索引级别将具有“ 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])
谢谢!
答案 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