Obliczanie liczby konkretnych kolejnych równych wartości w sposób wektorowy W Pandzie

Załóżmy, że mamy następujące ramki danych pandy:

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 w sposób wektorowy w pandach? Chciałbym mieć taki wynik:

   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 wektoryzowana operacja cumsum, która resetuje się pod określonym warunkiem.
Author: Puggie, 2015-03-19

1 answers

Możesz zrobić coś takiego(kredyt idzie do: Jak emulować itertools.groupby z serii / 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
 10
Author: Ashwini Chaudhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-19 11:26:13