2012-08-20 32 views
1

我試圖拆散一個數據幀在其上執行操作(在唯一的一次),然後將其疊到一起這樣的:如何恢復在大熊貓未疊加數據幀

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() 

的問題是,多指標是手術後逆轉,有沒有簡單的方法可以做到這一點?也許我從一開始就濫用堆棧?

回答

3

stackunstack將等級添加到MultiIndex的,這是不可控制的。你可以用reorder_levels()改變級別的順序在一個多指標:stacked.reorder_levels([2, 1, 0])會給你在df

+0

謝謝幾乎以同樣的多指標水平順序,你必須添加'.sortlevel(0)'得到一個正確的多指標。 – SlimJim 2012-08-20 09:28:32

+0

確實可能需要排序,我的重點是關卡的順序。 – 2012-08-20 09:30:25