Матрицы не выровнены сообщение об ошибке
У меня есть следующий dataframe возвратов
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
Я не уверен, почему я получаю эту ошибку, но был бы очень рад альтернативному решению для взвешенного дохода
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
Для скалярного произведения фрейма данных dfA на фрейм данных dfB имена столбцов dfA должны совпадать с индексом dfB, иначе вы получите ошибку «ValueError: матрицы не выровнены».
dfA = pd.DataFrame( data = [[1, 2], [3, 4], [5, 6]], columns=['one', 'two'])
dfB = pd.DataFrame( data = [[1, 2, 3], [4, 5, 6]], index=['one', 'two'])
dfA.dot(dfB)
Проверьте форму матриц, на которых вы называете скалярное произведение. Точечное произведение матриц A.dot(B)
может быть вычислено, только если вторая ось A имеет такой же размер, как и первая ось B.
В вашем примере у вас есть дополнительный столбец с датой, который разрушает ваши вычисления. Вы должны просто избавиться от этого в своих вычислениях. Попробуйте запустить port_ret = ret[:,1:].dot(df3[1:])
и проверьте, дает ли он желаемый результат.
Для будущих случаев используйте numpy.shape()
Функция для отладки матричных вычислений, это действительно полезный инструмент.