2017-10-08 81 views
1

我有一个数据帧与列A,B,C,D和索引是一个时间序列。如何根据多索引级别映射到新的数据框?

我想创建一个具有相同索引的新数据框,但是多索引中有更多的列。 A,B,C,D是多指数的第一级。根据多索引级别,我希望新数据框中的每一列具有与A,B,C,D相同的值。

换句话说,如果我有这样一个数据帧:

A B C D 
0 2 3 4 5 
1 X Y Z 1 

我想打一个新的数据帧,看起来像这样

A   B  C D 
    0 1 2 3 4 5 6 7 
0 2 2 2 3 3 4 5 5 
1 X X X Y Y Z 1 1 

换句话说 - 我想要做的在excel中相当于一个“HLOOKUP”,使用多索引的第一级并查找原始数据框。

新的多指标是预先确定的。

+0

你是如何确定的列在较低的水平是多少? –

+0

较低级别的列数是预先确定的。换句话说,假设我已经准备好了另一个多索引。 – karakumy

+0

你可以在这里包括,或者它的代码?我相信你需要一些符合'reindex'的东西,但是除非我们知道要重新编制索引,否则我们不能给你一个答案。 –

回答

3

正如意见建议的cᴏʟᴅsᴘᴇᴇᴅ,您可以使用DataFrame.reindexcolumnslevel参数:

In [35]: mi 
Out[35]: 
MultiIndex(levels=[['A', 'B', 'C', 'D'], ['0', '1', '2', '3', '4', '5', '6', '7']], 
      labels=[[0, 0, 0, 1, 1, 2, 3, 3], [0, 1, 2, 3, 4, 5, 6, 7]]) 

In [36]: df 
Out[36]: 
    A B C D 
0 2 3 4 5 
1 X Y Z 1 

In [37]: df.reindex(columns=mi, level=0) 
Out[37]: 
    A  B  C D 
    0 1 2 3 4 5 6 7 
0 2 2 2 3 3 4 5 5 
1 X X X Y Y Z 1 1 
+0

完美!谢谢。 – karakumy

+0

这是一个很好的答案。 – piRSquared