首页 > 解决方案 > 创建一个主列相互堆叠的数据框

问题描述

我需要将开盘价和收盘价相互叠加以创建更长的系列。应该有三列,每列股票的名称

我尝试过使用df.stack(),但它会将股票名称堆叠在一起

df=data[['Open', 'Close']]
df

                            Open                   Close
            ABBV    ABMD    ABT     ABBV    ABMD    ABT
Date                        
2013-12-31  52.99   27.47   38.38   52.81   26.74   38.33
2014-01-02  52.12   26.66   38.09   51.98   26.85   38.23
2014-01-03  52.25   26.84   38.37   52.30   27.06   38.64
2014-01-06  52.70   27.23   39.19   50.39   27.30   39.15

标签: pythonpandasdataframe

解决方案


默认情况下,stack堆叠最后一个索引级别,其中包含您案例中的股票名称。指定不同的级别:

df = df.stack(level=0)

df.index.names = ['Date', 'Type']
df = df.reset_index().sort_values(['Date', 'Type'], ascending=[True, False])

结果:

         Date   Type   ABBV   ABMD    ABT
1  2013-12-31   Open  52.99  27.47  38.38
0  2013-12-31  Close  52.81  26.74  38.33
3  2014-01-02   Open  52.12  26.66  38.09
2  2014-01-02  Close  51.98  26.85  38.23
5  2014-01-03   Open  52.25  26.84  38.37
4  2014-01-03  Close  52.30  27.06  38.64
7  2014-01-06   Open  52.70  27.23  39.19
6  2014-01-06  Close  50.39  27.30  39.15

您可以set_index('Date')reset_index(drop=True)重置最左边的索引列。


推荐阅读