我有一个名为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中处理。谢谢!
答案 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:我使用状态人口的随机值