0
votes

Pandas Cumsum Réinitialisation conditionnelle

J'utilise une solution existante pour tenter de produire une somme cumulative qui réinitialise après une certaine valeur (dans ce cas> = 16). Actuellement, je reçois la sortie suivante, mais il y a des cas lorsque le Cumsum est toujours supérieur à 16.

df = pd.DataFrame({'Size':[8,8,8,8,7,6,7,6,5,2]})

ls = []  
cumsum = 0
last_reset = 0
for _, row in df.iterrows():
    cumsum = cumsum + row.Size
    ls.append(cumsum)
    if cumsum >= 16:
        last_reset = cumsum
        cumsum = 0 
df['cumsum'] = ls


3 Réponses :


2
votes
    Size    cumsum
0   8       8
1   8       16
2   8       8
3   8       16
4   7       7
5   6       13
6   7       7
7   6       13
8   5       5
9   2       7

1 commentaires

Très appréciée!



1
votes

Une légère variation de la réponse acceptée ici: perfrom cumulatif somme sur une colonne mais réinitialiser à 0 si la somme devient négative dans les pandas peut vous aider à résoudre ce problème.

Puisque cette solution utilise Numba, elle Soyez beaucoup plus rapide que la normale iTerrows solution xxx


0 commentaires

0
votes

Je pense qu'une bonne solution est une "fonction avec la mémoire" à appliquer à chaque valeur de votre colonne d'intérêt.

Définissez la fonction suivante pour calculer votre somme: xxx

Notez que cette fonction a un attribut ( somme ) , ça devrait être réglé Avant le premier appel de cette fonction. xxx

puis appliquez-le sur taille colonne et enregistrez le résultat sous forme cumsum colonne : xxx


0 commentaires