我有以下返回数据框
ret
Out[3]:
Symbol FX OGDC PIB WTI
Date
2010-03-02 0.000443 0.006928 0.000000 0.012375
2010-03-03 -0.000690 -0.007873 0.000171 0.014824
2010-03-04 -0.001354 0.001545 0.000007 -0.008195
2010-03-05 -0.001578 0.008796 -0.000164 0.015955
每个符号的以下权重:
df3
Out[4]:
Symbol Weight
0 OGDC 0.182022
1 WTI 0.534814
2 FX 0.131243
3 PIB 0.151921
我试图获得每天的加权回报并尝试:
port_ret = ret.dot(df3)
但是我收到以下错误消息:
ValueError: matrices are not aligned
我的目标是为每个日期加权回报,例如2010-03-02将如下:
weighted_ret = 0.000443*.131243+.006928*.182022+0.000*0.151921+0.012375*.534814 = 0.007937512
我不确定为什么会收到此错误,但对于加权回报的替代解决方案会非常高兴
答案 0 :(得分:3)
您的权重矩阵中有两列:
df3.shape
Out[38]: (4, 2)
在该矩阵上将索引设置为Symbol
以获得正确的dot
:
ret.dot(df3.set_index('Symbol'))
Out[39]:
Weight
Date
2010-03-02 0.007938
2010-03-03 0.006430
2010-03-04 -0.004278
2010-03-05 0.009902
答案 1 :(得分:0)
检查您正在调用点积的矩阵的形状。仅当A的第二轴与B的第一轴的尺寸相同时,才能计算矩阵A.dot(B)
的点积。
在您的示例中,您有额外的日期列,这会破坏您的计算。你应该在你的计算中摆脱它。尝试运行port_ret = ret[:,1:].dot(df3[1:])
并检查它是否产生您想要的结果
对于将来的情况,使用numpy.shape()
函数来调试矩阵计算,这是非常有用的工具。