2015-03-02 90 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