2012-12-14 11 views
12

Ich möchte eine laufende Summe über einen Pandas-Datenrahmen aufbauen. Ich habe so etwas wie:Laufende Summe in Pandas (ohne Schleife)

10/10/2012: 50, 0 
10/11/2012: -10, 90 
10/12/2012: 100, -5 

Und ich möchte bekommen:

10/10/2012: 50, 0 
10/11/2012: 40, 90 
10/12/2012: 140, 85 

So sollte jede Zelle sein, die Summe von sich selbst und allen früheren Zellen, wie soll ich dies tun, ohne mit einer Schleife.

+6

Hinweis - die normale n ame für "running sum" ist "cumulative sum" - üblicherweise verkürzt auf "cumsum" - eine schnelle Suche in der Dokumentation und du solltest gut gehen :) –

+0

Danke @JonClements, das war was ich gesucht habe. Ich konnte den Begriff, den ich suchte, einfach nicht finden. – leo

+0

(etwas) bezogen werden: http://stackoverflow.com/questions/12370349/reasoning-about-consecutive-data-points-without-using-iteration – codeape

Antwort

18

Wie @JonClements erwähnt , können Sie dies mit der cumsum DataFrame-Methode tun:

from pandas import DataFrame 
df = DataFrame({0: {'10/10/2012': 50, '10/11/2012': -10, '10/12/2012': 100}, 1: {'10/10/2012': 0, '10/11/2012': 90, '10/12/2012': -5}}) 

In [3]: df 
Out[3]: 
       0 1 
10/10/2012 50 0 
10/11/2012 -10 90 
10/12/2012 100 -5 

In [4]: df.cumsum() 
Out[4]: 
       0 1 
10/10/2012 50 0 
10/11/2012 40 90 
10/12/2012 140 85 
+0

Aus irgendeinem Grund, dies für meinen Fall nicht funktioniert. Ich musste tun: df ['XYX'] = df ['XYZ']. Cumsum() –

+0

@ user1815357 sehr seltsam! Macht es Ihnen etwas aus, ein Beispiel als ein Problem auf GitHub zu veröffentlichen (vielleicht ist es ein Bug) https://github.com/pydata/pandas/issues?direction=desc&sort=updated&state=open –

+0

Sicher. Wird in wenigen Stunden tun. –

Verwandte Themen