如何获取Pandas stack()函数以正确对齐数据框?

时间:2018-10-16 14:29:47

标签: python-2.7 pandas dataframe

我有一个带有多级列标题的数据框,如下所示:

           AAPL US Equity                                         A51 Index  \
                  PX_LAST VOLATILITY_30D 3MTH_IMPVOL_100.0%MNY_DF   PX_LAST
date
2018-01-02         172.26         17.170                  22.6288   148.450
2018-01-03         172.23         17.166                  22.7465   146.025
2018-01-04         173.03         16.300                  22.3322   144.700

                                                   AGN US Equity  \
           VOLATILITY_30D 3MTH_IMPVOL_100.0%MNY_DF       PX_LAST
date
2018-01-02          19.34                      NaN        170.32
2018-01-03          20.30                      NaN        170.14
2018-01-04          20.23                      NaN        171.58


           VOLATILITY_30D 3MTH_IMPVOL_100.0%MNY_DF
date
2018-01-02         27.229                  30.0374
2018-01-03         26.453                  29.7482
2018-01-04         26.566                  29.2898

当我使用时:

df = df.stack(0)

我注意到列标题与数据不对齐:

                           3MTH_IMPVOL_100.0%MNY_DF  PX_LAST  VOLATILITY_30D
date
2018-01-02 AAPL US Equity                       NaN  148.450          19.340
           A51 Index                        22.6288  172.260          17.170
           AGN US Equity                    30.0374  170.320          27.229
2018-01-03 AAPL US Equity                       NaN  146.025          20.300
           A51 Index                        22.7465  172.230          17.166
           AGN US Equity                    29.7482  170.140          26.453
2018-01-04 AAPL US Equity                       NaN  144.700          20.230
           A51 Index                        22.3322  173.030          16.300
           AGN US Equity                    29.2898  171.580          26.566

如您所见,AAPL US Equity的PX_LAST值在2018年1月2日从初始数据帧开始为172.26,但在堆栈中显示为148.450。奇怪的是,直到(2018-10-15)之前的代码都没有以这种方式失败。我有一个不需要使用stack(0)的解决方案,但是我对为什么它不再起作用感到好奇,因为在Pandas中,stack是一种非常常见的数据处理用例。

编辑:更多细节,看来多索引标签是错误的:

MultiIndex(levels=[[u'AAPL US Equity', u'A51 Index', u'AGN US Equity'], [u'PX_LAST', u'VOLATILITY_30D', u'3MTH_IMPV OL_100.0%MNY_DF']],
           labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]])

这可能与我要从中提取数据的API相比,与Pandas有更多关系,因为第一个标签列表已排序,而第二个标签列表似乎已排序为单独的列表,然后进行了串联。我猜stack()引用这些标签来取消旋转数组

0 个答案:

没有答案