Python 我想找出数据帧中1列与所有其他列之间的协方差

Python 我想找出数据帧中1列与所有其他列之间的协方差,python,numpy,pandas,covariance,Python,Numpy,Pandas,Covariance,我试图分析全国证券交易所的数据。我想用熊猫计算每个股票相对于指数的协方差(nifty),然后计算每个股票的贝塔系数。我该怎么做呢 我找到了计算一列与另一列协方差的方法,但我的数据框架有大约36个股票收盘价列和1个指数收盘价列。如何使用单个命令计算索引列中所有列的协方差?您首先需要计算价格回报率(您使用的是调整后的收盘价,对吗?) 接下来,将协方差计算为一个序列(我使用字典理解创建序列): 这将为您提供每个股票与指数的协方差。要使用beta=cov(ri,rm)/var(rm)计算beta,您可以

我试图分析全国证券交易所的数据。我想用熊猫计算每个股票相对于指数的协方差(nifty),然后计算每个股票的贝塔系数。我该怎么做呢


我找到了计算一列与另一列协方差的方法,但我的数据框架有大约36个股票收盘价列和1个指数收盘价列。如何使用单个命令计算索引列中所有列的协方差?

您首先需要计算价格回报率(您使用的是调整后的收盘价,对吗?)

接下来,将协方差计算为一个序列(我使用字典理解创建序列):


这将为您提供每个股票与指数的协方差。

要使用
beta=cov(ri,rm)/var(rm)计算beta,您可以使用
DataFrame.cov
from作为分子

下面的示例假设数据框的索引包含日期,由
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

下面的一行每年生成beta,但我知道,通常需要60个月的窗口

by_year.apply(betas, 'vwretd')

这将计算每个股票与其他股票的协方差,这可能会很快变得难以处理。最好避免这种不必要的计算。
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')
by_year.apply(betas, 'vwretd')