创建一个数据框,使主列相互堆叠

时间:2019-07-27 15:09:23

标签: python pandas dataframe

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

我尝试使用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

1 个答案:

答案 0 :(得分:4)

默认情况下,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)重设最左边的索引列。