我想在 pandas 的数据框中找到 1 列与所有其他列之间的协方差
I want to find the Covariance between 1 column with all the other columns in a dataframe in pandas
我正在尝试分析国家证券交易所数据。我想使用 pandas 计算每只股票与指数的协方差(漂亮),然后计算每只股票的 beta。我该怎么办?
我找到了计算 1 列与另一列的协方差的方法,但我的数据框有大约 36 个股票收盘价列和 1 个指数收盘价列。如何使用单个命令计算所有列与索引列的协方差?
您首先需要计算 returns 的价格(您使用的是调整后的收盘价,对吧?)。
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})
这将为您提供每只股票与指数的协方差。
要使用 beta = cov(ri,rm)/var(rm)
计算贝塔系数,您可以使用 pandas 中的 DataFrame.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')
函数的最后一行只选择协方差矩阵的'market'列。此列包含测试版。
下面一行按年生成测试版,但我知道通常需要 60 个月 windows。
by_year.apply(betas, 'vwretd')
我正在尝试分析国家证券交易所数据。我想使用 pandas 计算每只股票与指数的协方差(漂亮),然后计算每只股票的 beta。我该怎么办?
我找到了计算 1 列与另一列的协方差的方法,但我的数据框有大约 36 个股票收盘价列和 1 个指数收盘价列。如何使用单个命令计算所有列与索引列的协方差?
您首先需要计算 returns 的价格(您使用的是调整后的收盘价,对吧?)。
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})
这将为您提供每只股票与指数的协方差。
要使用 beta = cov(ri,rm)/var(rm)
计算贝塔系数,您可以使用 pandas 中的 DataFrame.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')
函数的最后一行只选择协方差矩阵的'market'列。此列包含测试版。
下面一行按年生成测试版,但我知道通常需要 60 个月 windows。
by_year.apply(betas, 'vwretd')