所以我想这个问题很简单,但我无法找到答案。我想要做的是在库存数据上运行PanelOLS。要做到这一点,我导入了2个表,一个是每周一次的股票回报,另一个是谷歌趋势的每周搜索频率,并将它们连成一个“主数据帧”。然后我循环这个操作x次,这样我的'Main Dataframe'中就有了许多不同的股票。这看起来像这样:
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
答案 0 :(得分: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