2015-03-02 99 views
3

我想轉動像一個數據幀:樞軸熊貓據幀到分層列/更改列層次

 dim1 Value_V  Value_y instance 
0  A_1  50.000000  0 instance200 
1  A_2 6500.000000  1 instance200 
2  A_3  50.000000  0 instance200 
3  A_4 4305.922313  1 instance200 

向具備分層列這樣一個數據幀:

   A_1    A_2    A_3    ..... 
       Value_V Value_y Value_V Value_y Value_V Value_y 
instance200 50  0  6500  1  50  0 

我試過df = df.pivot(index = "instance", columns = "dim1"),但它只會給我一個這樣的框架:

   Value_V    Value_y        
       A_1 A_2 A_3 .... A_1 A_2 A_3 .... 
instance200 50 6500 50  0 1 0 

我怎樣才能改變的H層次的列?

回答

4

我想通了由自己:

df = df.swaplevel(0,1,axis = 1).sort(axis = 1) 

會做

+0

哈哈,好一個,我被你自己打了10秒鐘 – Anzel 2015-03-02 21:27:23

+0

是的,但是謝謝你的努力:) – 2015-03-02 21:34:45

+1

作爲一個附註,** swaplevel **對swa有好處pping在2之間,而** reorder_levels **可以一次執行多個,如果有幫助:) – Anzel 2015-03-02 21:37:46

2

你需要的是reorder_levels,然後對列進行排序,就像這樣:

import pandas as pd 

df = pd.read_clipboard() 

df 
Out[8]: 
dim1 Value_V Value_y instance 
0 A_1 50.000000 0 instance200 
1 A_2 6500.000000 1 instance200 
2 A_3 50.000000 0 instance200 
3 A_4 4305.922313 1 instance200 
In [9]: 

df.pivot('instance', 'dim1').reorder_levels([1, 0], axis=1).sort(axis=1) 
Out[9]: 
dim1  A_1    A_2    A_3    A_4 
      Value_V Value_y Value_V Value_y Value_V Value_y Value_V Value_y 
instance         
instance200 50  0  6500 1  50  0  4305.922313 1 
+0

如果有人遇到:「'DataFrame'對象沒有'sort'屬性」看看這個問題:https://stackoverflow.com/questions/44123874/dataframe-object-has-no-attribute-sort – kristian 2017-11-08 12:52:45