我可以一次性生成所有列(持有股票收益)的(股票)Beta,而不必遍历熊猫框架中的每一列

时间:2020-09-10 12:35:09

标签: python pandas dataframe

我有一个数据框(df),其中包含多只股票的月度收益(按列)。最后一栏是基准收益。数据框索引是YYYYMM格式的月末日期。我需要为每只股票生成beta。虽然我可以遍历每一列并生成各自的beta,但我希望使用Python可以找到一种不涉及循环的更优雅的解决方案。有人可以帮我吗。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您不想使用循环,则必须使用numpy进行一些矩阵乘法。例如

from pandas_datareader import data
import pandas as pd 
import numpy as np

# download prices
tickers = ['PYPL', 'JPM', 'NKE']
stock = data.DataReader(tickers, 'yahoo', '2019-08-31', '2020-08-31')
bench = data.DataReader('^GSPC', 'yahoo', '2019-08-31', '2020-08-31')

# returns from prices
bench_returns = bench['Adj Close'].pct_change()[1:]
stock_returns = stock['Adj Close'].pct_change()[1:]

# Matrix multiplication
A = np.array(bench_returns)
B = np.array(stock_returns)

betas = 1 / np.dot(A, A.transpose()) * np.dot(A.transpose(), B)
betas 

结果:

array([1.16944123, 1.31768569, 0.9873832 ])