如何根据多索引级别映射到新的数据框?
问题描述:
我有一个数据帧与列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”,使用多索引的第一级并查找原始数据框。
新的多指标是预先确定的。
答
正如意见建议的cᴏʟᴅsᴘᴇᴇᴅ,您可以使用DataFrame.reindex
与columns
和level
参数:
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
你是如何确定的列在较低的水平是多少? –
较低级别的列数是预先确定的。换句话说,假设我已经准备好了另一个多索引。 – karakumy
你可以在这里包括,或者它的代码?我相信你需要一些符合'reindex'的东西,但是除非我们知道要重新编制索引,否则我们不能给你一个答案。 –