【发布时间】:2018-03-07 13:40:11
【问题描述】:
我有一个包含两个布尔字段的数据框(如下所示)。
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 行,计数 = 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 循环来实现这一点,但到目前为止还没有能够产生一个很好的嵌套组合来提供我想要的结果。任何帮助表示赞赏。如果问题不完全清楚,我深表歉意。
【问题讨论】:
标签: python pandas for-loop dataframe while-loop