Я получаю сообщение об ошибке:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Даже если я не оцениваю никаких заявлений. Ошибка появляется, когда я пытаюсь передать это
max_sharpe_idx = np.argmax(results[2])
, где результаты ранее были переданы как
results = np.zeros((3,num_portfolios), object)
и результаты [2] - это массив чисел с плавающей точкой.
Почему возникает эта ошибка, я не могу понять, какие-либо мысли?
Может предоставить все функции в случае необходимости.
РЕДАКТИРОВАТЬ: функция, заполняющая результаты:
def random_portfolios(num_portfolios, mean_returns, cov_matrix, risk_free_rate):
results = np.zeros((3,num_portfolios), object)
weights_record = []
for i in range(num_portfolios):
weights = np.random.random(12)
weights /= np.sum(weights)
weights_record.append(weights)
portfolio_std_dev, portfolio_return = portfolio_annualised_performance(weights, mean_returns, cov_matrix)
results[0,i] = portfolio_std_dev
results[1,i] = portfolio_return
results[2,i] = (portfolio_return - risk_free_rate) / portfolio_std_dev
return results, weights_record
ОБНОВЛЕНИЕ: при печати типа результатов и результатов [2,0] это вывод:
results: <class 'numpy.ndarray'>
results[2,0]: <class 'pandas.core.series.Series'>
Переменная, которая, вероятно, вызывает проблему:
portfolio_return <class 'pandas.core.series.Series'>
Выходные данные портфолио возвращаются следующим образом:
ABB.ST 0.043190
ALFA.ST 0.015955
AMD 0.031319
SAAB-B.ST 0.018625
ERIC-B.ST 0.080382
FORTUM.HE 0.013456
INVE-B.ST 0.044658
NDA-SE.ST 0.027568
NOKIA-SEK.ST 0.040725
SWED-A.ST 0.013694
TEL2-B.ST 0.038682
VOLV-B.ST 0.003941
dtype: float64
Поскольку возврат портфеля является результатом:
mean_returns = returns.mean()
pandas.core.series.Series
Как мне обойти это?
Полный код при необходимости: https://github.com/timoudas/PortfolioOpt
Но вывод заключается в том, что существуют проблемы со структурой данных, которые я не знаю, как решить