如何重塑这个数据框

How to reshape this dataframe

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

  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 by column nam, reindex_axis columns and last 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 for droping column variable, sort_values by column nam and last 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 is now undocumented, but is possible in future will by removed (with pd.wide_to_long too)。

可能的解决方案是将所有 3 个功能合并为一个 - 也许 melt,但现在尚未实施。也许在 pandas 的一些新版本中。然后我的回答会更新。