2015-09-25 62 views
1

我正在嘗試分析國家證券交易所數據。我想用熊貓計算每隻股票與指數(漂亮)的協方差,然後在那裏計算每隻股票的β。我該怎麼辦呢?我想查找1列與熊貓數據框中所有其他列之間的協方差

我找到了計算1列與另一列的協方差的方法,但我的數據框有大約36個股票收盤價格欄和1個指數收盤欄。我怎樣才能用一個命令來計算索引列的所有列的協方差?

回答

2

您首先需要計算價格的回報(您正在使用調整後的收盤價,對嗎?)。

returns = df.pct_change() 

接下來,你計算的協方差爲一系列(我使用字典解析來創建系列):

index = 'SPY' # Change to your ticker for the index. 
s = pd.Series({symbol: returns[index].cov(returns[symbol]) 
       for symbol in df 
       if symbol != index}) 

這會給你每隻股票的協方差與指數。

0

要使用beta = cov(ri,rm)/var(rm)來計算貝塔值,您可以使用pandasDataFrame.cov作爲分子。

下面的示例假定DataFrame的索引包含日期,由to_datetime()生成。市場指數是CRSP的vwret,但任何其他市場指數也可以。

get_year = lambda x: x.year 
by_year = returns.groupby(get_year) # for yearly betas 

def betas(returns, market): 
    b=returns.cov()/returns[market].var() # generates cov matrix 
    return(pd.Series(b[market], index=list(returns))) # index includes the stock names 

beta=betas(returns, 'vwretd') 

函數的最後一行只選擇協方差矩陣的「市場」列。此列包含測試版。

下面這行代碼每年都會生成beta,但我知道一個通​​常需要60個月的窗口。

by_year.apply(betas, 'vwretd') 
相關問題