我有一个布尔值True
/False
-column "Mask
";在数据帧中,例如:
Mask
True
True
True
False
False
True
False
False
现在我试图添加一个列与连续True
/False
行的计数,其中True
是一个正和(+1的计数)和False
是一个负和(-1的计数),例如
Mask Count
True 3
True 3
True 3
False -2
False -2
True 1
False -2
False -2
我尝试了groupby
和sum
,但现在我的头打结了。
试过
mask.groupby((~mask).cumsum()).cumsum().astype(int)
(mask
是True
/False
的条件),但这只计算true,并且计数而不是显示总和。
非常感谢任何建议!
可以通过.cumsum()
获取连续True
/False
的组号,并代入g
。
然后按g
分组,按.transform()
+.size()
得到各组的大小/计数。通过乘以np.where()
的返回值(1
或-1
)来设置符号,如下所示:
g = df['Mask'].ne(df['Mask'].shift()).cumsum()
df['Count'] = df.groupby(g)['Mask'].transform('size') * np.where(df['Mask'], 1, -1)
结果:
print(df)
Mask Count
0 True 3
1 True 3
2 True 3
3 False -2
4 False -2
5 True 1
6 False -2
7 False -2