首页 > 解决方案 > 跨多列融合 DataFrame

问题描述

我有一个这样的 DataFrame,其中包含 A、B、C 和 D 列以及日期范围表示为字符串的索引:

index                         A          B            C           D
03/05/2020-09/05/2020         0.000      3456.000     123.254     0.000              
26/04/2020-02/05/2020         0.000      123.123      555.255     0.000
19/04/2020-25/04/2020         9.253      0.000        223.1310    0.000 

如何将其融合为这种格式,将日期范围字符串分组为索引,将 VALUE 和 ITEMS 分组为列?

DATE                       VALUE      ITEM    
03/05/2020-09/05/2020      0.000      A     
03/05/2020-09/05/2020      3456.000   B
03/05/2020-09/05/2020      123.254    C
03/05/2020-09/05/2020      0.000      D
26/04/2020-02/05/2020      0.000      A
26/04/2020-02/05/2020      123.123    B
26/04/2020-02/05/2020      555.255    C
26/04/2020-02/05/2020      0.000      D
19/04/2020-25/04/2020      9.253      A
19/04/2020-25/04/2020      0.000      B
19/04/2020-25/04/2020      223.1310   C
19/04/2020-25/04/2020      0.000      D

标签: pythonpandas

解决方案


这对你有用吗

df.unstack().reset_index(level = 0).sort_values('index')

...并根据需要重命名或重新排序列和行。

df.unstack().reset_index(level = 0).sort_values('index').rename({'level_0':'ITEM',0:'VALUE'}, axis = 1)[['VALUE','ITEM']].merge(df.reset_index()['index'], how = 'inner', right_on = 'index', left_index = True).sort_index().set_index('index').rename_axis(index = 'DATE')

结果与您的示例相符。

                          VALUE ITEM
DATE
03/05/2020-09/05/2020     0.000    A
03/05/2020-09/05/2020  3456.000    B
03/05/2020-09/05/2020   123.254    C
03/05/2020-09/05/2020     0.000    D
26/04/2020-02/05/2020     0.000    A
26/04/2020-02/05/2020   123.123    B
26/04/2020-02/05/2020   555.255    C
26/04/2020-02/05/2020     0.000    D
19/04/2020-25/04/2020     9.253    A
19/04/2020-25/04/2020     0.000    B
19/04/2020-25/04/2020   223.131    C
19/04/2020-25/04/2020     0.000    D

推荐阅读