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 :
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
Très appréciée!
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 code> solution p>
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: p> Notez que cette fonction a un attribut ( somme em>) , ça devrait être réglé
Avant le premier appel de cette fonction. p> puis appliquez-le sur taille em> colonne et enregistrez le résultat sous forme cumsum em> colonne : p>
Est-ce que cela répond à votre question? Comment réinitialiser Cumsum après avoir changé de signe de valeurs? < / a>
Je pense que c'est plus compliqué que ça @fbruzzesi
Est-ce que cela répond à votre q: Stackoverflow.com/questions/57510604/...
Est-ce que cela répond à votre question? Perfrom Cumulatif Summer sur une colonne mais réinitialiser à 0 si la somme devient négative dans les pandas