因此,我认为这个问题非常简单,但是我无法设法找到答案。我要执行的操作是对库存数据运行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] 删除。
我来说两句