2016-05-15 65 views
0

所以我想這個問題很簡單,但我無法找到答案。我想要做的是運行PanelOLS庫存數據。爲此,我導入兩張表格,一張帶有股票的每週回報,另一張帶有谷歌趨勢的每週搜索頻率,並將它們連接成一個「主數據框」。然後我循環這個操作x次,這樣我的「主數據框」中就有多個不同的股票。這看起來是這樣的:在Dataframe上創建多索引來執行PanelOLS

   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: Only 2-level MultiIndex are supported.

當我包括:

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',它確實創建了一個multiindex,看起來像這樣,但這並不能幫助我執行迴歸(我有還試圖用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 

我將如果需要的話,也可以發佈完整的代碼,但是有相當多的問題與問題無關,我不想包含e不必要的代碼。而且由於我能夠創建一個多索引(只是順序錯誤),我想有一個簡單的解決方案,我沒有看到。我使用Python 2.7版和熊貓18.1

回答

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 
+0

這與加就地=真在.set_index工作開始,非常感謝! –

+0

這是正確的,上面的聲明是直接打印出來的。很高興這是有幫助的! – Stefan