如何在pandas中还原未堆叠的数据帧

如何在pandas中还原未堆叠的数据帧,pandas,Pandas,我正在尝试取消数据帧的堆栈(仅在一段时间内)并对其执行操作,然后将其重新堆叠在一起,如下所示: import pandas as pd import numpy as np from itertools import * time = pd.date_range(pd.datetime(2007,1,1),pd.datetime(2007,1,2)) slot = map(lambda n:"s-"+str(n),reversed(range(2))) obj = map(lambda n:

我正在尝试取消数据帧的堆栈(仅在一段时间内)并对其执行操作,然后将其重新堆叠在一起,如下所示:

import pandas as pd
import numpy as np
from itertools import *

time = pd.date_range(pd.datetime(2007,1,1),pd.datetime(2007,1,2))
slot = map(lambda n:"s-"+str(n),reversed(range(2)))
obj  = map(lambda n:"o-"+str(n),reversed(range(2)))
idx  = pd.MultiIndex.from_tuples(list(product(slot, obj, time)), names=['Ananas','Bananas','time']) #list(.) needed to get a length, should this really be needed?
data = np.random.rand(len(idx),4)

df = pd.DataFrame(data=data,index=idx, columns=['a','b','c','d']) #why is idx.size==0?

print df.to_string()
print "====="
unstacked = df.unstack(level=[0,1])
print unstacked.to_string()
print "====="
stacked = unstacked.stack(level=[2,1])
print stacked.to_string()

问题是,多索引在操作后会反转,有没有简单的方法可以实现这一点?也许我从一开始就误用了堆栈?

堆栈
取消堆栈
将级别添加到多索引的末尾,这是不可控的。您可以使用
reorder_levels()
堆叠来更改多索引中的级别顺序。reorder_levels([2,1,0])
将为您提供与
df

中相同的多索引级别顺序。多亏了几乎是有效的,您必须添加
.sortlevel(0)
,才能获得正确的多索引。实际上,排序可能是必要的,我的重点是级别的顺序。