我正在尋找一種方法來做類似於pandas
的各種rolling_*
函數,但我希望滾動計算的窗口由一系列值(例如,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之間,那麼第三個窗口將包含所有行,其行數在3到7之間等等。窗口的行數不會相同,但在每個窗口中選擇的值的範圍將是相同的。所以輸出應該是這樣的:
>>> 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
總是產生不相交的組。我不能用滾動函數來做,因爲它們的窗口總是按行數滾動,而不是按值滾動。那我該怎麼做呢?
謝謝,似乎這樣做。我用一個更一般的版本添加了我自己的答案,但我接受你的答案。 – BrenBarn