我在数据框中有一个布尔True/ False-列“ ”,例如:Mask
Mask
True
True
True
False
False
True
False
False
Run Code Online (Sandbox Code Playgroud)
现在我尝试添加一列,其中包含连续True/False行的计数,其中True是正和(计数为+1),False是负和(计数为-1),例如
Mask Count
True 3
True 3
True 3
False -2
False -2
True 1
False -2
False -2
Run Code Online (Sandbox Code Playgroud)
我尝试过groupby,sum但现在我脑子里有一个结。
尝试过类似的东西
mask.groupby((~mask).cumsum()).cumsum().astype(int)
Run Code Online (Sandbox Code Playgroud)
(是/mask的条件) 但这仅计算 True 并进行计数而不显示总和。TrueFalse
非常感谢任何建议!
可以得到连续True/ Falseby的组号.cumsum()并放入 中g。
然后,分组并通过+g获取每个组的大小/计数。通过乘以 的返回值(或)来设置符号,如下所示:.transform().size()1-1np.where()
g = df['Mask'].ne(df['Mask'].shift()).cumsum()
df['Count'] = df.groupby(g)['Mask'].transform('size') * np.where(df['Mask'], 1, -1)
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |