如何重塑此数据框

时间:2016-05-09 14:32:55

标签: python pandas reshape

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

  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

1 个答案:

答案 0 :(得分:6)

您可以使用lreshapesort_valuesnamreindex_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和最后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,但现在它没有实现。也许在一些新版本的熊猫中。然后我的答案会更新。