我有一个看起来像这样的多索引熊猫数据框
ID I II III
METRIC a b c d a b c d a b c d
2015-08-01 0 1 2 3 20 21 22 23 40 41 42 43
2015-08-02 4 5 6 7 24 25 26 27 44 45 46 47
2015-08-03 8 9 10 11 28 29 30 31 48 49 50 51
它按日期(2015-08-01
,2015-08-02
,2015-08-03
等)编制索引,第一级列(I
,II
,III
)是ID
s,第二级列对应METRIC
s a
,b
,c
,{{1 }})。我想将其重塑为以下内容
d
我已经(未成功)使用METRIC a b c d
ID
I 2015-08-01 0 1 2 3
2015-08-02 4 5 6 7
2015-08-03 8 9 10 11
II 2015-08-01 20 21 22 23
2015-08-02 24 25 26 27
2015-08-03 28 29 30 31
III 2015-08-01 40 41 42 43
2015-08-02 44 45 46 47
2015-08-03 48 49 50 51
,.pivot
和.stack
进行了调查,但是他们没有给我我想要的东西。我目前循环遍历.melt
并构建数据框的列表,并将它们ID
一起作为新数据框来获取我想要的内容。
任何建议都将不胜感激。
答案 0 :(得分:4)
Let's use stack
, swaplevel
and sort_index
:
df.stack(0).swaplevel(0,1).sort_index()
Output:
METRIC a b c d
ID
I 2015-08-01 0 1 2 3
2015-08-02 4 5 6 7
2015-08-03 8 9 10 11
II 2015-08-01 20 21 22 23
2015-08-02 24 25 26 27
2015-08-03 28 29 30 31
III 2015-08-01 40 41 42 43
2015-08-02 44 45 46 47
2015-08-03 48 49 50 51
答案 1 :(得分:3)
您可以让transpose
或T
为您完成部分工作。
df.T.stack().unstack(1)
METRIC a b c d
ID
I 2015-08-01 0 1 2 3
2015-08-02 4 5 6 7
2015-08-03 8 9 10 11
II 2015-08-01 20 21 22 23
2015-08-02 24 25 26 27
2015-08-03 28 29 30 31
III 2015-08-01 40 41 42 43
2015-08-02 44 45 46 47
2015-08-03 48 49 50 51
答案 2 :(得分:0)
使用@piRSquared的方法,我们可以跳过转置,只需df.unstack().unstack(1)