在满足某些条件的情况下(在Python中)循环遍历DataFrame并计算DataFrame中出现次数的最快方法是什么?

泰特先生

我有一个带有两个布尔字段的数据框(如下所示)。

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循环来完成此操作,但到目前为止,还没有能够提供一个良好的嵌套组合来提供我想要的结果。任何帮助表示赞赏。如果问题不能完全解决,我深表歉意。

邮编

这个怎么样:

df['a3'] = df.apply(lambda x: 0 if not x.a1 else len(df.a2[x.name:df.a2.tolist()[x.name:].index(True)+x.name]), axis=1)

因此,如果a1被False写入,则写入0从该行到next的列表长度True

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章