2016-05-16 12 views
0

Ich habe zwei Spalten, mit denen ich arbeite. Die erste Spalte enthält Nullen und die zweite Spalte enthält Boolesche Werte.Add Nummer zu Spalte jedes Mal, wenn eine andere Spalte hat eine Gruppe von True Bools

column 1   column 2 
0     True 
0     True 
0     False 
0     True 
0     True 
0     False 
0     False 
0     True 

Es gibt Millionen von Zeilen sind so versuche ich, ein effizientes Verfahren zur Figur, die in Spalte 2 und für jede Gruppierung von True bools sieht fügt 1 bis Spalte 1.

column 1   column 2 
1     True 
1     True 
0     False 
2     True 
2     True 
0     False 
0     False 
3     True 

Jede Hilfe viel ist geschätzt!

Antwort

4

Ein Trick, der oft in praktisch, wenn Operationen an zusammenhängenden Gruppen sind die Schalen cumsum Muster Vektorisierung:

>>> c = df["column 2"] 
>>> c * (c & (c != c.shift())).cumsum() 
0 1 
1 1 
2 0 
3 2 
4 2 
5 0 
6 0 
7 3 
Name: column 2, dtype: int32 
+0

DSM das funktioniert super! Sehr geschätzt. –

0
df['column 3'] = (df['column 2'] & (df['column 2'].shift() != True)) 
df['column 4'] = df['column 3'].cumsum() 

df['column 1'] = df['column 2'] * df['column 4'] 

print df 

    column 1 column 2 column 3 column 4 
0   1  True  True   1 
1   1  True False   1 
2   0 False False   1 
3   2  True  True   2 
4   2  True False   2 
5   0 False False   2 
6   0 False False   2 
7   3  True  True   3 
+0

@Andy Winhold bearbeiten Antwort – piRSquared

+0

piRSquared versuchte ich Ihren Ansatz, wie gut und es funktioniert einfach genauso gut. Es fügte Spalten 3 und 4 hinzu, die ich nicht brauchte. Vielen Dank für Ihre Zeit! –

Verwandte Themen