将Dataframe中的所有列转换为MultiIndex Dataframe

时间:2016-08-08 03:26:50

标签: python dataframe multi-index

我有一个名为Pop的数据框,如下所示(对不起,这格式不是很好,但它是一个单独的Index DataFrame(State是索引),每年都有列。我只有放一小部分数据):

           2007    2008    2009
State                               
Alabama 4637904 4677464 4708708

有没有办法轻松将其转换为MultiIndex DataFrame,其中Year成为二级索引。唯一的项目是一个新的领域'人口'从原始dataFrame获取数据。理想情况下看起来像是:

                Population
State     Year

Alabama   2007     4637904

Alabama   2008     4677464

Alabama   2009     4708708

等...

我一直在寻找某种代码,因为这似乎可以在Python中处理。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用melt将列转换为行:

In [10]: df
Out[10]: 
     state      2007      2008      2009
0  Alabama   4637904   4677464   4708708
1    Maine   1234567   1432765   1432567
2  Florida  19432765  19123456  19765654

In [13]: out = pd.melt(df, id_vars=['state'], var_name=['year'], value_name='population')

In [14]: out
Out[14]: 
     state  year  population
0  Alabama  2007     4637904
1    Maine  2007     1234567
2  Florida  2007    19432765
3  Alabama  2008     4677464
4    Maine  2008     1432765
5  Florida  2008    19123456
6  Alabama  2009     4708708
7    Maine  2009     1432567
8  Florida  2009    19765654

最后设置索引:

In [15]: out.set_index(['state', 'year'])
Out[15]: 
              population
state   year            
Alabama 2007     4637904
Maine   2007     1234567
Florida 2007    19432765
Alabama 2008     4677464
Maine   2008     1432765
Florida 2008    19123456
Alabama 2009     4708708
Maine   2009     1432567
Florida 2009    19765654

PS:我使用状态人口的随机值