Я ищу способ сделать что-то вроде различных rolling_*
функций pandas
, но я хочу, чтобы окно скользящего вычисления определялось диапазоном значений (например, диапазон значений столбец DataFrame), а не количеством строк в окне.
В качестве примера предположим, что у меня есть эти данные:
>>> print d
RollBasis ToRoll
0 1 1
1 1 4
2 1 -5
3 2 2
4 3 -4
5 5 -2
6 8 0
7 10 -13
8 12 -2
9 13 -5
Если я делаю что-то вроде rolling_sum(d, 5)
, я получаю текущую сумму, в которой каждое окно содержит 5 строк. Но то, что я хочу, - это скользящая сумма, в которой каждое окно содержит определенный диапазон значений RollBasis
. То есть, я хотел бы сделать что-то вроде d.roll_by(sum, 'RollBasis', 5)
и получить результат, когда первое окно содержит все строки, чья RollBasis
находится между 1 и 5, тогда второе окно содержит все строки, чей RollBasis
составляет от 2 до 6, тогда третье окно содержит все строки, у которых RollBasis
находится между 3 и 7 и т.д. Окна не будут иметь одинаковое количество строк, но диапазон значений RollBasis
, выбранных в каждом окне, будет одна и та же. Таким образом, вывод должен выглядеть следующим образом:
>>> d.roll_by(sum, 'RollBasis', 5)
1 -4 # sum of elements with 1 <= Rollbasis <= 5
2 -4 # sum of elements with 2 <= Rollbasis <= 6
3 -6 # sum of elements with 3 <= Rollbasis <= 7
4 -2 # sum of elements with 4 <= Rollbasis <= 8
# etc.
Я не могу сделать это с помощью groupby
, потому что groupby
всегда создает непересекающиеся группы. Я не могу сделать это с помощью функций качения, потому что их окна всегда катятся по количеству строк, а не по значениям. Итак, как я могу это сделать?