Pandas多指标点积

2024-04-18 01:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题在金融界很常见。在

给定权重数组w(1xN)和资产协方差矩阵Q(NxN),可以使用二次表达式w'*Q*w计算投资组合的协方差,其中*是点积。在

我想知道当我有权W(txn)的历史和协方差矩阵(T,N,N)的三维结构时,执行此操作的最佳方法是什么。在

import numpy as np
import pandas as pd

returns = pd.DataFrame(0.1 * np.random.randn(100, 4), columns=['A', 'B', 'C', 'D'])
covariance = returns.rolling(20).cov()

weights = pd.DataFrame(np.random.randn(100, 4), columns=['A', 'B', 'C', 'D'])

到目前为止,我的解决方案是将pandas数据帧转换为numpy,执行循环计算,然后再转换回pandas。 注意,我需要显式地检查标签的对齐方式,因为实际上协方差和权重可以通过不同的过程来计算。在

^{pr2}$

有没有纯熊猫的方法可以达到同样的效果?或者对代码进行了改进,使其更高效?(尽管使用了numpy,它仍然很慢)。在


Tags: columns方法importnumpydataframepandasasnp
1条回答
网友
1楼 · 发布于 2024-04-18 01:19:34

我认为numpy绝对是最好的选择。不过,如果你循环使用值/日期,效率就会降低。在

我建议计算投资组合的滚动波动率(无循环):

returns = pd.DataFrame(0.1 * np.random.randn(100, 4), columns=['A', 'B', 'C', 'D'])
covariance = returns.rolling(20).cov()
weights = pd.DataFrame(np.random.randn(100, 4), columns=['A', 'B', 'C', 'D'])

rows, columns = weights.shape

# Go to numpy:
w = weights.values
cov = covariance.values.reshape(rows, columns, columns)

A = np.matmul(w.reshape(rows, 1, columns), cov)
var = np.matmul(A, w.reshape(rows, columns, 1)).reshape(rows)
std_dev = np.sqrt(var)

# Back to pandas (in case you want that):
pd.Series(std_dev, index = weights.index)

相关问题 更多 >

    热门问题