>>> df
Jan Feb
2001 3 4
2002 2 7
>>> df.unstack()
Jan 2001 3
2002 2
Feb 2001 4
2002 7
>>> df = df.unstack().reset_index(name='value')
>>> df
level_0 level_1 value
0 Jan 2001 3
1 Jan 2002 2
2 Feb 2001 4
3 Feb 2002 7
>>> df.rename(columns={'level_0': 'month', 'level_1': 'year'}, inplace=True)
>>> df
month year value
0 Jan 2001 3
1 Jan 2002 2
2 Feb 2001 4
3 Feb 2002 7
你只需要做
df.unstack()
就可以创建一个多索引序列,其中月份作为第一级索引,年份作为第二级索引。如果您希望它们是列,那么只需在之后调用reset_index()
。另一个解决方案是使用
pandas.melt
来避免不必要的MultiIndex
创建,尽管如果您的帧很小,并且使用我的解决方案,您仍然需要为“熔融”数据创建一个临时的,并不昂贵。melt
的勇气表明,id_vars
和value
都是复制的,因为id_vars
创建使用tile
,而value
创建使用df.values.ravel('F')
,我相信如果您的数据不是Fortran顺序的,这会产生复制。编辑:我不确定调用
ravel
时何时生成副本,因为order
参数仅指示您希望如何读取数据,而docstring则表示仅在需要时生成副本。相关问题 更多 >
编程相关推荐