假设我在 Pandas 中有以下数据框:
AA BB CC date 05/03 1 2 3 06/03 4 5 6 07/03 7 8 9 08/03 5 7 1
我想将其转换为以下内容:
AA 05/03 1 AA 06/03 4 AA 07/03 7 AA 08/03 5 BB 05/03 2 BB 06/03 5 BB 07/03 8 BB 08/03 7 CC 05/03 3 CC 06/03 6 CC 07/03 9 CC 08/03 1
我该怎么做?
从宽到长的转换的原因是,在下一阶段,我想根据日期和初始列名(AA,BB,CC)将此数据框与另一个数据框合并。
pd.melt这是解决此问题的惯用、灵活且快速的解决方案。请勿用于unstack此。
pd.melt
unstack
unstack返回具有多索引的系列:
In [38]: df.unstack() Out[38]: date AA 05/03 1 06/03 4 07/03 7 08/03 5 BB 05/03 2 06/03 5 07/03 8 08/03 7 CC 05/03 3 06/03 6 07/03 9 08/03 1 dtype: int64
您可以在返回的系列上调用 reset_index:
In [39]: df.unstack().reset_index() Out[39]: level_0 date 0 0 AA 05-03 1 1 AA 06-03 4 2 AA 07-03 7 3 AA 08-03 5 4 BB 05-03 2 5 BB 06-03 5 6 BB 07-03 8 7 BB 08-03 7 8 CC 05-03 3 9 CC 06-03 6 10 CC 07-03 9 11 CC 08-03 1
或者构建一个具有多索引的数据框:
In [40]: pd.DataFrame(df.unstack()) Out[40]: 0 date AA 05-03 1 06-03 4 07-03 7 08-03 5 BB 05-03 2 06-03 5 07-03 8 08-03 7 CC 05-03 3 06-03 6 07-03 9 08-03 1