我有一个带有两个布尔字段的数据框(如下所示)。
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 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] 删除。
我来说两句