У меня есть временной ряд возвратов в pandas фрейме данных с индексом даты и столбцом возврата, помеченным 'TRI', как таковой:
VALUE_DATE TRI
2007-06-26 -0.000727
2007-06-27 0.015004
2007-06-28 0.000758
2007-06-29 -0.006408
2007-07-02 0.013844
2007-07-03 0.003866
Я пытаюсь агрегировать совокупный доход за изменяющиеся интервалы с использованием метода pandas groupby
. Я создал собственный метод:
def cumRets(z):
return np.exp(np.log(1 + z).cumsum()) - 1
Но я не могу успешно использовать его в вызове apply
.
Для справки, эта группа (по годам), как и ожидалось, хотя и с простой суммой:
returns.groupby(returns.index.year).sum()
Вывод:
VALUE_DATE TRI
2007 -0.046283
2008 -0.240282
2009 0.259417
2010 0.268445
2011 0.054842
2012 0.162453
2013 0.331585
2014 0.063425
2015 -0.009367
2016 0.242511
2017 0.132732
2018 -0.099919
2019 0.233057
2020 -0.002414
Но, применяя мой метод cumRets
, я получаю все строки вместо агрегированных итогов за год. Этот вызов возвращает правильные значения в последний день каждого месяца, но возвращает каждую строку, ведущую к нему, а не только указанную группу по значению:
returns.groupby(returns.index.year).apply(cumRets)
Вывод:
VALUE_DATE TRI
2019-12-26 0.250672
2019-12-27 0.247278
2019-12-30 0.246734
2019-12-31 0.248562
2020-01-02 0.000143
2020-01-03 -0.002414
Желаемый результат будет выглядеть следующим образом (сокращенно):
VALUE_DATE TRI
...
...
2019 0.248562
2020 -0.002414
Вопрос 1a , это то, как я бы делал то же самое для месячных и еженедельных интервалов, где желаемый вывод будет выглядеть примерно так, соответственно (только формат, значения являются заполнителями):
Вывод, Ежемесячно:
VALUE_DATE TRI
...
...
2019-12 0.066746
2020-01 -0.002414
Выходные данные, еженедельно:
VALUE_DATE TRI
...
...
2019-12-w3 0.013228
2019-12-w4 0.022367
2020-01-w1 -0.002414