les pandas de roulement calcul avec fenêtre basée sur les valeurs au lieu de compte

Je suis à la recherche d'un moyen de faire quelque chose comme les différents rolling_* fonctions de pandas, mais je veux que la fenêtre des rolling calcul défini par un intervalle de valeurs (par exemple, une plage de valeurs d'une colonne d'un DataFrame), pas par le nombre de lignes dans la fenêtre.

Comme un exemple, supposons que j'ai ces données:

>>> 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

Si je fais quelque chose comme rolling_sum(d, 5), je reçois un roulement somme dont chaque fenêtre contient 5 lignes. Mais ce que je veux, c'est un roulement somme dont chaque fenêtre contient une certaine gamme de valeurs de RollBasis. C'est que j'aimerais être en mesure de faire quelque chose comme d.roll_by(sum, 'RollBasis', 5), et d'obtenir un résultat où la première fenêtre contient toutes les lignes dont le RollBasis est entre 1 et 5, puis la deuxième fenêtre contient toutes les lignes dont le RollBasis est entre 2 et 6, puis la troisième fenêtre contient toutes les lignes dont le RollBasis est entre 3 et 7, etc. Windows n'auront pas le même nombre de lignes, mais la gamme de RollBasis valeurs sélectionnées dans chaque fenêtre sera le même. La sortie devrait ressembler à:

>>> 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.

Je ne peux pas faire cela avec groupby, parce que groupby produit toujours disjoints groupes. Je ne peux pas le faire avec les rolling fonctions, parce que leur windows toujours rouler en nombre de lignes, pas par des valeurs. Alors, comment puis-je le faire?

OriginalL'auteur BrenBarn | 2013-01-13