python - 熊猫数据框:计算连续的真/假值
问题描述
我在数据框中有一个布尔True
/-False
列“ 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 并进行计数而不是显示总和。
非常感谢任何建议!
解决方案
可以得到连续True
/ False
by的组号.cumsum()
并放入g
。
然后, group by并通过+g
获取每个组的大小/计数。通过乘以 的返回值(或)来设置符号,如下所示:.transform()
.size()
1
-1
np.where()
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
推荐阅读
- html - 如何在 Angular 中将 contentchildren 的每个孩子包装在他们自己的元素中
- python - 打印字典中的前“n”个条目
- android - 恢复之前的实例和活动状态
- python - 为什么尝试使用 pygame.mixer.Channel.play(Sound) 引发 SystemError?
- javascript - Application Insights 记录查看的列表项?
- azure - Azure SQL 数据库规模
- ffmpeg - FFMPEG没有从视频中提取所有帧
- python - 用于验证字典的内置解决方案
- matlab - 使用向量而不是循环
- ios - 如何处理 Swift 中 UITableViewCell 中可能存在或不存在的元素?