如何在Pandas DataFrame列中统计连续重复事件的出现次数?
解决连续事件无中断计数的方案
要实现连续相同事件计数、中断后重置的需求,不能直接用RANK()(它会全局统计事件出现次数,不区分连续性),可以通过分组+组内行号的方式实现,核心是把连续相同的事件归为同一组,再在组内生成递增计数。
通用SQL实现(支持MySQL 8.0+、PostgreSQL、SQL Server等)
SELECT Date, Event, ROW_NUMBER() OVER (PARTITION BY grp ORDER BY Date) AS Count FROM ( SELECT Date, Event, -- 生成分组标识:当前事件与上一行不同时,分组号+1,否则保持 SUM(CASE WHEN Event = LAG(Event) OVER (ORDER BY Date) THEN 0 ELSE 1 END) OVER (ORDER BY Date) AS grp FROM your_table -- 替换成你的表名 ) t;
逻辑说明
- 内层查询:
- 用
LAG(Event) OVER (ORDER BY Date)获取当前行的上一行事件值 - 通过
CASE判断当前事件是否和上一行相同,不同则返回1,相同返回0 - 用
SUM() OVER (ORDER BY Date)累加这个判断结果,得到分组编号grp——连续相同的事件会被分到同一个grp里
- 用
- 外层查询:
- 按
grp分区,在每个分区内按Date排序,用ROW_NUMBER()生成从1开始的连续计数,事件中断后新分组会重新从1开始计数
- 按
内容的提问来源于stack exchange,提问作者Qing
相关产品推荐
相关产品推荐

