2015-03-19 12 views
8

Powiedzmy mamy następujący pandy DataFrame:Obliczanie liczby konkretnych kolejnych wartościach równych w vectorized sposób w pand

In [1]: 
import pandas as pd 
import numpy as np 

df = pd.DataFrame([0, 1, 0, 0, 1, 1, 0, 1, 1, 1], columns=['in']) 
df 
Out[1]: 
    in 
0 0 
1 1 
2 0 
3 0 
4 1 
5 1 
6 0 
7 1 
8 1 
9 1 

Jak policzyć liczbę kolejnych te w vectorized sposób w pand? Chciałbym uzyskać wynik podobny do tego:

in out 
0 0 0 
1 1 1 
2 0 0 
3 0 0 
4 1 1 
5 1 2 
6 0 0 
7 1 1 
8 1 2 
9 1 3 

Coś jak wektoryzacja operacji suma, która resetuje się w określonych warunkach.

Odpowiedz

7

można zrobić coś takiego (zasługa: how to emulate itertools.groupby with a series/dataframe?):

>>> df['in'].groupby((df['in'] != df['in'].shift()).cumsum()).cumsum() 
0 0 
1 1 
2 0 
3 0 
4 1 
5 2 
6 0 
7 1 
8 2 
9 3 
dtype: int64 
+0

fair play. Uderzyłem w to głową przez 40 minut: P – Ffisegydd

+0

@Ffisegydd To samo tutaj :-), ale miałem wrażenie, że ktoś mógłby poprosić o odpowiednik grupy 'itertools.groupby' w Pandach. –

+0

Tak, wiedziałem, że tego chcę, po prostu nigdy nie zadałem sobie trudu, aby to zrobić> _ < – Ffisegydd

Powiązane problemy