如何统计DataFrame中独立连续事件的数量?
统计DataFrame中独立连续事件的数量
你可以用pandas内置方法直接实现需求,步骤如下:
识别连续事件的分界点
用ne()方法判断当前行事件与上一行是否不同,shift()用于获取上一行数据,返回的布尔值中True代表新的连续事件开始。生成连续事件分组ID
对分界点的布尔值做累加(cumsum()),每个连续事件段会被分配唯一的分组ID。统计各事件的独立连续段数量
按事件分组后,统计每组对应的唯一分组ID数量,就是目标结果。
完整代码示例
import pandas as pd df = pd.DataFrame([1, 2, 2, 2, 1, 1, 1, 1, 2, 1], columns=["events"]) # 生成连续事件分组ID df['group_id'] = df['events'].ne(df['events'].shift()).cumsum() # 统计每个事件的独立连续段数量 result = df.groupby('events')['group_id'].nunique().reset_index(name='count') print(result)
运行结果:
events count 0 1 3 1 2 2
简洁写法
如果不想新增列,也可以用一行代码完成:
result = df['events'].ne(df['events'].shift()).cumsum().groupby(df['events']).nunique().reset_index(name='count')
关键方法说明
ne():等价于!=,判断当前值与上一行值是否不等,是识别连续事件切换的核心。cumsum():将分界点的True(视为1)累加,生成唯一的连续事件分组标识。nunique():统计每个事件对应的分组ID数量,即独立连续事件的个数。
内容的提问来源于stack exchange,提问作者bhern
相关产品推荐
相关产品推荐

