Предположим, у вас есть фрейм данных с 1000 ценами закрытия. Вы хотите применить функцию расчета риска (скажем, VaR) с именем compute_var()
к последним 90 ценам закрытия на скользящей основе. Как бы ты это сделал? Я полагаю с apply()
:
def compute_var(df):
return do_calculations_on(df[-90:])
def compute_rolling_var(self):
self.var = self.closing.apply(compute_var)
Проблема в том, что .apply
передает только закрытие 1 дня compute_var, а не фреймворку данных. Значит выдает ошибку.
Единственное рабочее решение, которое я нашел, - это алгоритм итерационного стиля (.iterrow ()): я передаю индекс итерации в compute_var
, и он обрезает закрывающий фрейм данных self.closing[:i]
перед выполнением вычислений в последних 90 строках, затем он заполняет фрейм данных df.var через .loc(i) = computer_var_value
.
Я подозреваю, что есть способ получше.
rolling_apply
устарел в пользу _ 2_ - person KT12   schedule 18.03.2019