我需要像这样重塑数据帧:

  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

最佳答案

您可以使用lreshapesort_values按列namreindex_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

另一种具有meltdrop的溶液,用于逐列滴加variablesort_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,但现在还没有实现。也许是新版本的熊猫。然后我的答案会更新。

09-06 07:57