2013-04-09 29 views
1

說我有一個多指標數據幀,如:如何使第一級MultiIndex成爲列?

In [1]: arrays = [['one','one','one','two','two','two'],[1,2,3,1,2,3]]  

In [2]: df = pa.DataFrame(randn(6,1),index=pa.MultiIndex.from_tuples(zip(*arrays)),columns=['A']) 

In [3]: df                 
Out[3]:                  
       A                
one 1 0.229037                
    2 -1.640695                
    3 0.908127                
two 1 -0.918750                
    2 1.170112                
    3 -2.620850                

我想改變這一個新的數據幀,與列的多指標數據框的第一級索引?有沒有簡單的方法? (下面的例子)

In [12]: dft = df.ix['one']             

In [13]: dft = dft.rename(columns={'A':'one'})        

In [14]: dft['two'] = df.ix['two']['A']          

In [15]: dft                 
Out[15]:                  
     one  two              
1 0.229037 -0.918750              
2 -1.640695 1.170112              
3 0.908127 -2.620850              

回答

7

也許你正在尋找pandas.unstack

In [56]: df 
Out[56]: 
       A 
one 1 0.229037 
    2 -1.640695 
    3 0.908127 
two 1 -0.918750 
    2 1.170112 
    3 -2.620850 

In [57]: df.unstack(level=0) 
Out[57]: 
      A   
     one  two 
1 0.229037 -0.918750 
2 -1.640695 1.170112 
3 0.908127 -2.620850 
+0

謝謝!這是非常有用的,我想這是在開發版本。 – wiswit 2013-04-09 20:51:23

+0

不,我錯了。至少在我現在使用的0.9版本中。 – wiswit 2013-04-10 11:21:39

2

我想補充的東西這一點,有製造多層索引使用reset_index()功能列的另一種選擇。這裏的區別在於,它只是將值「彈出」爲新列。取決於你的用例:

In [5]: df 
Out[5]: 
       A 
one 1 -1.598591 
    2 -0.354813 
    3 -0.435924 
two 1 1.408328 
    2 0.448303 
    3 0.381360 

In [6]: df.reset_index() 
Out[6]: 
    level_0 level_1   A 
0  one  1 -1.598591 
1  one  2 -0.354813 
2  one  3 -0.435924 
3  two  1 1.408328 
4  two  2 0.448303 
5  two  3 0.381360 
相關問題