2016-09-01 2 views
0

Ich bin nach einer Möglichkeit, eine Folge von Zahlen zu erzeugen, die auf jedem Reset brechenZählnummer groupby ID mit Reset

Beispiel

ID VAR 
A 0 
A 0 
A 1 
A 1 
A 0 
A 0 
A 1 
A 1 
B 1 
B 1 
B 1 
B 0 
B 0 
B 0 
B 0 

Jedes Mal var ist 1 und ID die gleiche ist wie bevor Sie den Zähler starten. aber wenn ID nicht gleich ist oder VAR 0 beginnen Sie wieder von 0

gewünschte Ausgabe

ID VAR DESIRED 
A 0 0 
A 0 0 
A 1 1 
A 1 2 
A 0 0 
A 0 0 
A 1 1 
A 1 2 
B 1 1 
B 1 2 
B 1 3 
B 0 0 
B 0 0 
B 0 0 
B 0 0 

Antwort

1

Sie einen Zwischenindex erstellen können, und dann groupby dieser Index und ID, auf VAR cumsumming up:

df['ix'] = df['VAR'].diff().fillna(0).abs().cumsum() 

df['DESIRED'] = df.groupby(['ID','ix'])['VAR'].cumsum() 

In [21]: df 
Out[21]: 
    ID VAR ix DESIRED 
0 A 0 0  0 
1 A 0 0  0 
2 A 1 1  1 
3 A 1 1  2 
4 A 0 2  0 
5 A 0 2  0 
6 A 1 3  1 
7 A 1 3  2 
8 B 1 3  1 
9 B 1 3  2 
10 B 1 3  3 
11 B 0 4  0 
12 B 0 4  0 
13 B 0 4  0 
14 B 0 4  0 
+0

Clevere Lösung – steboc