Python 每次不同列具有一组真布尔值时,向列添加数字

Python 每次不同列具有一组真布尔值时,向列添加数字,python,pandas,Python,Pandas,我有两个专栏正在使用。第一列用零填充,第二列用布尔填充 column 1 column 2 0 True 0 True 0 False 0 True 0 True 0 False 0 False 0 True

我有两个专栏正在使用。第一列用零填充,第二列用布尔填充

column 1           column 2
0                  True
0                  True
0                  False
0                  True
0                  True
0                  False
0                  False
0                  True
有数百万行,所以我试图找出一个高效的流程,查看第2列,对于每一组真布尔值,在第1列中添加1

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

非常感谢您的帮助

在对连续组进行矢量化操作时,一个常用的技巧是shift-cumsum模式:

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

在对连续组进行矢量化操作时,一个常用的技巧是shift-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

皮尔斯:我也试过你的方法,效果也一样好。它确实添加了我不需要的第3列和第4列。谢谢你抽出时间!皮尔斯:我也试过你的方法,效果也一样好。它确实添加了我不需要的第3列和第4列。谢谢你抽出时间!