将 Dataframe 中的所有列转换为 MultiIndex Dataframe 中的单个二级索引

Convert all columns in a Dataframe to a single secondary index in a MultiIndex Dataframe

我有一个名为 Pop 的数据框,如下所示(抱歉,格式不太好,但它是一个单独的 Index DataFrame(State 是索引),每年都有列。我只放了一个小的数据样本):

           2007    2008    2009
State                               
Alabama 4637904 4677464 4708708

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

                Population
State     Year

Alabama   2007     4637904

Alabama   2008     4677464

Alabama   2009     4708708

等...

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

您可以使用 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 :我对州人口使用了随机值