Я хотел бы ускорить al oop, который использовал groupby.nth()
в кадре данных на каждой итерации. Вот краткое объяснение моего кода: представьте, что я хочу выполнить симуляцию Монте-Карло:
-> Допустим, у меня есть датафрейм df1 весов измерения 10 * 20. (веса 10 активов, которые развиваются с течением времени, ie 20 лет, сумма в каждом столбце = 1).
-> И df2 (см. изображение), еще один, который составляет 200 000 * 20. (Первый столбцы - это Nan, так как это датафрейм возвратов)
200.000 - это данные для моих 10 активов, размещенных в ряд (по 20 000 строк в каждом).
Мой код: -проискивает количество симуляций (0
-группировать по df2 по активу
-создать dftemp = df2.groupby ('актив'). Nth (i) и вычислить доходность (i) умножая df1 * dftemp и суммируя результат по оси = 0
Returns = np.zeros((nbsimulations,nbyears))
Capital = np.zeros((nbsimulations,nbyears))
gb = datafilereturns.groupby('Asset')
for i in range(0, nbsimulations):
path = gb.nth(i)
retsum = (TranspGrilleT.values * path.values).sum(axis=0)
Returns[i,:] = retsum[1:]
Capital[:,0] = Capital[:,0] * (1 + Returns[:,0])
Моя проблема заключается в том, что для большого количества симуляций (20.000, ie макс., поскольку у нас не более 20.000 данных для каждого актива), код довольно медленный, так как он должен использовать nth (i) в l oop, умножать значения df1 и dftemp и суммировать их на каждом шаге.
Я пытался взглянуть на Cython и Numba, чтобы ускорить код, но безуспешно. Может ли Numpy ускорить это oop? Но как в этом случае заменить функцию nth (i) на pandas?
Спасибо за помощь!
набор данных, ie df2