2014-11-03 35 views
0
Category      Cat2 average 
Beauty/Wellness/Healthcare 1  54.50 
           2  53.25 
           3  48.00 
           4  57.57 
           5  51.33 
           6  18.50 
           7  16.00 

我有一个数据框,多级。我需要将第二级转换为简单的列。可能吗? unstacking创建第1列到第7列。将子水平转换为单列

作为补充:是否可以重命名组名称(级别0和1)?

回答

2

df.reset_index(['Cat2'])会将Cat2索引转换为列。

例如,

In [38]: df 
Out[38]: 
            average 
Category      Cat2   
Beauty/Wellness/Healthcare 1  54.50 
           2  53.25 
           3  48.00 
           4  57.57 
           5  51.33 
           6  18.50 
           7  16.00 

In [39]: df.reset_index(['Cat2']) 
Out[39]: 
           Cat2 average 
Category          
Beauty/Wellness/Healthcare  1 54.50 
Beauty/Wellness/Healthcare  2 53.25 
Beauty/Wellness/Healthcare  3 48.00 
Beauty/Wellness/Healthcare  4 57.57 
Beauty/Wellness/Healthcare  5 51.33 
Beauty/Wellness/Healthcare  6 18.50 
Beauty/Wellness/Healthcare  7 16.00 

要更改指数级别名称,使用df.index.names = ['foo', 'bar']

In [48]: df.index.names = ['foo', 'bar'] 

In [49]: df 
Out[49]: 
            average 
foo       bar   
Beauty/Wellness/Healthcare 1  54.50 
           2  53.25 
           3  48.00 
           4  57.57 
           5  51.33 
           6  18.50 
           7  16.00 
+0

TNX。但是,df.reset_index(['Cat2'])以某种方式在'df.index'中创建索引的重复项,因此无法按类别重新组合。 – NoIdeaHowToFixThis 2014-11-03 20:43:17

+0

请发布'df.info()'和'df.index'。 – unutbu 2014-11-03 20:45:46

+0

Index([u'Beauty/Wellness/Healthcare',u'Beauty/Wellness/Healthcare',u'Beauty/Wellness/Healthcare',u'Beauty/Wellness/Healthcare',u'Beauty/Wellness/Healthcare',u 'Beauty/Wellness/Healthcare',u'Beauty/Wellness/Healthcare',u'Food&Drink',u'Food&Drink',u'Food&Drink',u'Food&Drink',u'Food&Drink ',u'Food&Drink',u'Other',u'Other',u'Other',u'Other',u'Other',u'Other',u'Other',u'Other',u 'Other',u'Other'],dtype ='object') – NoIdeaHowToFixThis 2014-11-03 20:47:20