在数据框上创建多索引以执行PanelOLS

马克·沃特

因此,我认为这个问题非常简单,但是我无法设法找到答案。我要执行的操作是对库存数据运行PanelOLS。为此,我导入了2张表,其中一张具有股票的每周收益,而另一张则具有Google趋势的每周搜索频率,并将它们合并为一个“主数据框”。然后,我将此操作循环x次,这样我的“主数据框”中就会有许多不同的库存。看起来像这样:

             Open  Close Ticker  log(weekly returns)  Search Frequency
2016-01-09  34.84  28.04   ACAD                -0.22              25.0
2016-01-16  28.46  23.78   ACAD                -0.18              26.0
2016-01-09  24.49  24.52   ABBB                 0.00              24.0
2016-01-16  24.11  20.69   ABBB                -0.15              26.0

现在,我需要在日期和代码上创建一个多索引以运行回归,但是它没有按照应有的方式对其进行排序,结果我得到了错误:

NotImplementedError:仅支持2级MultiIndex。

当我包括:

for stock in stocklist:
    stock_detail_df = pd.read_csv(path, index_col=0, parse_dates=True)
    trend_df = pd.read_csv(path2, index_col=0, parse_dates=True)
    complete_df = pd.concat([stock_detail_df, trend_df], axis=1)
    master_df = master_df.append(complete_df)

master_df.reset_index(level=0, inplace=True)
master_df['Date'] = master_df['index']
master_df = master_df.drop(['index'], 1)
master_df.set_index(['Date', 'Ticker'], inplace=True)

我得到的是:

                    Open  Close  log(weekly returns)  Search Frequency
Date       Ticker                                                     
2016-01-09 ACAD    34.84  28.04                -0.22              25.0
2016-01-16 ACAD    28.46  23.78                -0.18              26.0
2016-01-23 ACAD    24.49  24.52                 0.00              24.0
2016-01-30 ACAD    24.11  20.69                -0.15              26.0

数据框没有更改/外观与以前相同,尽管如果我交换“ Date”和“ Ticker”,它会创建一个看起来像这样的多索引,但这并不能帮助我进行回归(我也尝试过使用index.swaplevel(0,1),但这只返回上面的表):

                    Open  Close  log(weekly returns)  Search Frequency
Ticker Date                                                           
ACAD   2016-01-09  34.84  28.04                -0.22              25.0
       2016-01-16  28.46  23.78                -0.18              26.0
       2016-01-23  24.49  24.52                 0.00              24.0
       2016-01-30  24.11  20.69                -0.15              26.0

无论如何,最终产品应如下所示:

                    Open  Close  log(weekly returns)  Search Frequency
Date       Ticker                                                     
2016-01-09 ACAD    34.84  28.04                -0.22              25.0
           ABBB    10.21  11.05                -0.18              26.0
2016-01-16 ACAD    24.49  24.52                 0.00              24.0
           ABBB    11.05  15.07                -0.15              26.0

如果需要的话,我还将发布完整的代码,但是很多问题都与该问题无关,并且我不想包含不必要的代码。而且由于能够创建多索引(顺序错误),因此我想到了一个简单的解决方案,而我却没有看到。我正在使用python 2.7和pandas 18.1

斯特凡

从...开始

df.info()

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 4 entries, 2016-01-09 to 2016-01-16
Data columns (total 5 columns):
Open                   4 non-null float64
Close                  4 non-null float64
Ticker                 4 non-null object
log(weekly returns)    4 non-null float64
Search Frequency       4 non-null int64
dtypes: float64(3), int64(1), object(1)
memory usage: 192.0+ bytes

             Open  Close Ticker  log(weekly returns)  Search Frequency
2016-01-09  34.84  28.04   ACAD                -0.22                25
2016-01-16  28.46  23.78   ACAD                -0.18                26
2016-01-09  24.49  24.52   ABBB                 0.00                24
2016-01-16  24.11  20.69   ABBB                -0.15                26

使用

df.index.name='Date'
df.set_index('Ticker', append=True).sortlevel()

产生

                    Open  Close  log(weekly returns)  Search Frequency
Date       Ticker                                                     
2016-01-09 ABBB    24.49  24.52                 0.00                24
           ACAD    34.84  28.04                -0.22                25
2016-01-16 ABBB    24.11  20.69                -0.15                26
           ACAD    28.46  23.78                -0.18                26

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档