我需要像这样重塑数据帧:
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
最佳答案
您可以使用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
: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
编辑:
reset_index
现在是未记录的,但将来可能会被删除(with pd.wide_to_long too)。可能的解决方案是将所有3个函数合并为一个-可能
lreshape
,但现在还没有实现。也许是新版本的熊猫。然后我的答案会更新。