如何基于列值范围过滤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
相关产品推荐
相关产品推荐

