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 までのすべての行が含まれ、2 番目のウィンドウにRollBasis
2 から 6 までのすべての行が含まれ、3 番目のウィンドウに次のような結果が得られます。ウィンドウには、3 ~ 7 などのすべての行が含まれますRollBasis
。ウィンドウの行数は同じではありませんが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
ウィンドウは常に値ではなく行数でロールするため、ローリング関数ではできません。では、どうすればよいのでしょうか。