我需要像这样重塑数据帧:
nam code date1 date2
0 a 1 1/1 1/2
1 b 3 3/4 4/5
但df.stack
在这种情况下似乎毫无用处。
期望的输出:
nam code date
0 a 1 1/1
1 a 1 1/2
2 b 3 3/4
3 b 3 4/5
答案 0 :(得分:6)
您可以使用lreshape
,sort_values
列nam
,reindex_axis
列和最后reset_index
:
print pd.lreshape(df, {'date': ['date1', 'date2']})
.sort_values('nam')
.reindex_axis(['nam','code','date'], axis=1)
.reset_index(drop=True)
nam code date
0 a 1 1/1
1 a 1 1/2
2 b 3 3/4
3 b 3 4/5
另一个解决方案melt
,drop
用于删除列variable
,sort_values
按列nam
和最后reset_index
:
print pd.melt(df, id_vars=['nam','code'], value_name='date')
.drop('variable', axis=1)
.sort_values('nam')
.reset_index(drop=True)
nam code date
0 a 1 1/1
1 a 1 1/2
2 b 3 3/4
3 b 3 4/5
编辑:
lreshape
现在没有记录,但将来可能会删除(with pd.wide_to_long too)。
可能的解决方案是将所有3个函数合并为一个 - 也许melt
,但现在它没有实现。也许在一些新版本的熊猫中。然后我的答案会更新。