2016-05-16 51 views
0

我有兩列正在使用。第一列填充0,第二列填充布爾值。每次將不同的列添加到列時,將列號添加到列中True bools

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

有幾百萬行,所以我試圖找出一種有效的方法,着眼於列2和真正的bool的每個分組加1到第1列

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

任何幫助是多少不勝感激!矢量化連片組操作時,經常派上用場

回答

4

一招是移cumsum模式:

>>> 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

帝斯曼工程很棒!非常感謝。 –

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編輯答案 – piRSquared

+0

piRSquared我想你的方法,以及和它的作品只是一樣好。它確實添加了我並不需要的第3和第4列。感謝您的時間! –