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列。谢谢你抽出时间!