2015-03-19 6 views
8

Diciamo che abbiamo la seguente panda dataframe:calcolo del numero di specifici valori uguali consecutivi in ​​modo vettorializzare in panda

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 

Come contare il numero di quelle consecutive in modo vettorializzare in panda? Mi piacerebbe avere un risultato come questo:

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 

Qualcosa di simile a un'operazione cumSum vectorized che reimposta su una condizione specifica.

risposta

7

si può fare qualcosa di simile (merito va a: 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. Ho battuto la testa contro questo per 40 minuti: P – Ffisegydd

+0

@Ffisegydd Stesso discorso :-), ma ho avuto la sensazione che qualcuno avrebbe chiesto "itertools.groupby" gruppo equivalente in Panda da qualche parte. –

+0

Sì, lo sapevo, ma non mi sono mai preoccupato di Google> _ < – Ffisegydd

Problemi correlati