我有一个带有两个布尔字段的数据框(如下所示).
import pandas as pd
d = [{'a1':False, 'a2':False}, {'a1':True, 'a2':False}, {'a1':True, 'a2':False}, {'a1':False, 'a2':False}, {'a1':False, 'a2':True},
{'a1': False, 'a2': False}, {'a1':False, 'a2':False}, {'a1':True, 'a2':False}, {'a1':False, 'a2':True}, {'a1':False, 'a2':False},]
df = pd.DataFrame(d)
df
Out[1]:
a1 a2
0 False False
1 True False
2 True False
3 False False
4 False True
5 False False
6 False False
7 True False
8 False True
9 False False
我试图找到最快,最“ Pythonic”的方式来实现以下目标:
>如果a1 == True,则计数当前行中a2 == False的实例(例如第1行:a1 = True,对于第1行中的三行,a2为False)
>在a2 == True的第一个实例时,停止计数(例如,第4行,count = 3)
>在开始计数的行上将’count’的值设置为新的df列’a3′(例如,第1行的’a3’= 3)
目标结果集如下.
a1 a2 a3
0 False False 0
1 True False 3
2 True False 2
3 False False 0
4 False True 0
5 False False 0
6 False False 0
7 True False 1
8 False True 0
9 False False 0
我一直在尝试使用for循环,iterrows和while循环来完成此操作,但到目前为止,还没有能够提供一个良好的嵌套组合来提供我想要的结果.任何帮助表示赞赏.如果问题不能完全解决,我深表歉意.