You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于列值范围过滤Pandas DataFrame?筛选连续事件数≤3的记录

Pandas筛选连续事件序列长度≤3的记录

我的数据集包含一列统计连续事件数量的字段,当超过指定时长无事件发生时,计数器会重置为0。仅需筛选出整个连续事件序列长度≤3的记录(示例中仅保留对应time为19、20、21的行,因为这段连续事件只有3个)。

示例数据集:

import pandas as pd

# 示例数据集
event_counter = [0,1,2,3,4,0,1,2,3,4,5,6,0,1,2]
time = [1,2,3,4,5,9,10,11,12,13,14,15,19,20,21]
df = pd.DataFrame({"Time of Event": time, "Event Counter": event_counter})

实现步骤

核心思路是先按计数器重置的节点(Event Counter=0)分组,再筛选出组长度≤3的序列:

  • 标记分组边界:用cumsum()基于Event Counter==0生成分组ID,每遇到一个0就开启新组
  • 计算每组长度:用groupby()按分组ID统计每组的行数
  • 筛选目标组:保留长度≤3的分组ID,再提取这些组的所有行

代码实现

# 生成分组ID:每遇到Event Counter=0,分组ID加1
df['group_id'] = (df['Event Counter'] == 0).cumsum()

# 计算每个分组的长度,筛选出长度≤3的分组ID
valid_groups = df.groupby('group_id').size()[lambda x: x <=3].index

# 筛选出目标记录并移除临时分组列
result = df[df['group_id'].isin(valid_groups)].drop('group_id', axis=1)

print(result)

输出结果

Time of Event  Event Counter
12             19              0
13             20              1
14             21              2

内容的提问来源于stack exchange,提问作者swurj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:52:14