2012-12-14 5 views
12

Chciałbym zbudować sumę bieżącą nad ramką danych pandy. Mam coś takiego:Suma robocza w pandach (bez pętli)

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

I chciałbym dostać:

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

więc każda komórka powinna być sumą siebie i wszystkich poprzednich komórek, jak mam to zrobić bez użycia pętli.

+6

Wskazówka - normalna n ame za "suma robocza" to "suma skumulowana" - zwykle skrócona do "kumulacji" - szybkie wyszukiwanie w dokumentach i powinieneś być dobry :) –

+0

Dzięki @JonClements, to właśnie szukałem. Po prostu nie mogłem znaleźć terminu, którego szukałem. – leo

+0

(Trochę) pokrewne: http://stackoverflow.com/questions/12370349/reasoning-conutive-data-points-without-using-iteration – codeape

Odpowiedz

18

Jak wspomina @JonClements , możesz to zrobić za pomocą metody DataFrame cumsum:

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

Z jakiegoś powodu nie zadziałało to w moim przypadku. Musiałem zrobić: df ['XYX'] = df ['XYZ']. Cumsum() –

+0

@ user1815357 bardzo dziwne! Czy masz ochotę opublikować przykład jako problem na github (być może to błąd) https://github.com/pydata/pandas/issues?direction=desc&sort=updated&state=open –

+0

Pewnie. Zrobi to za kilka godzin. –