python - 有没有办法在 python pandas 中向量化投资组合标准差

标签 python pandas vectorization

我的目标是计算投资组合的标准差。

enter image description here

我生成了一个由 23 只股票组成的随机加权投资组合:

X = np.random.dirichlet(np.ones(23),size=1000)
rand_port_wts = pd.DataFrame(X, columns=data.columns)

矩阵为:(1000, 23)

我生成了一个协方差表:

annual_sec_std_deviation = (daily_sec_return.std()) * np.sqrt(num_trade_dys_py)

矩阵为:(23,23)

因为矩阵的形状,可以理解我得到了一个值错误:

ValueError: shapes (23,23) and (1000,23) not aligned: 23 (dim 1) != 1000 (dim 0)

我能想到解决问题的唯一方法是使用循环传递投资组合权重数据帧 (rand_port_wts) 的 1 行:

    tbl = []
for i in range(1000):
    tbl.append(np.sqrt(np.dot(rand_port_wts.loc[i].T, np.dot(annual_sec_covariance, rand_port_wts.loc[i]))))

tbl

虽然这有效,但需要很长时间并且并不优雅。我希望有人能够提出一些更有效的建议。

提前致谢

最佳答案

我不是 100% 确定,但请尝试:

portfolio_vol = rand_port_wts.apply(lambda x: np.dot(x.T, np.dot(cm, x)), axis=1)

其中 cm 是协方差矩阵

关于python - 有没有办法在 python pandas 中向量化投资组合标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59462628/

相关文章:

matlab - 向量化 matlab 列归一化

python - 如何将分组的文本逐一组合

python - 在Django中使多表继承设计通用

python - 尝试在 Excel 中编写与 SUMIF 功能等效的 Python 代码

python - Numba @guvectorize([(float64[ :], int64)], '(n),()->(n)' ) IndexError: 列表索引超出范围

c++ - 微软 C++ 编译器 : how to disable auto-vectorization with/O2?

python - 通过GLCM从图像中提取纹理特征

python - Pandas 合并箱

Python,有没有办法将 df.drop 分配给新变量?

python - 如何更改 pandas groupby.agg 函数的输入参数?