如何提取表中pattern连续序列长度>=3的对应行?
实现方案
核心逻辑
由于Id已经按升序排列,连续递增1的pattern序列满足:pattern值 - 该行的连续排序序号为固定值,以此作为分组标识即可区分不同的连续序列,后续过滤出长度≥3的分组即可拿到目标数据。
1. SQL 实现(支持窗口函数的数据库通用)
WITH seq_group AS ( SELECT Id, pattern, -- 若Id非连续自增,可替换为 pattern - ROW_NUMBER() OVER(ORDER BY Id ASC) 保证通用性 pattern - Id AS group_id FROM 你的表名 ), group_len_calc AS ( SELECT group_id, COUNT(*) AS seq_length FROM seq_group GROUP BY group_id ) SELECT s.Id, s.pattern FROM seq_group s INNER JOIN group_len_calc g ON s.group_id = g.group_id WHERE g.seq_length >= 3 ORDER BY s.Id ASC;
运行后输出结果和你给出的预期完全一致:3-6行、9-11行都会被返回,长度不足3的序列会被过滤。
2. Python Pandas 实现
import pandas as pd # 示例数据集,可替换为你自己读取的数据集 df = pd.DataFrame({ "Id": range(1, 12), "pattern": [1,2,1,2,3,4,1,2,1,2,3] }) # 生成分组标识 df["group_id"] = df["pattern"] - df["Id"] # 过滤长度≥3的分组 result = df[df.groupby("group_id")["group_id"].transform("count") >= 3].drop("group_id", axis=1) print(result)
输出结果:
Id pattern 2 3 1 3 4 2 4 5 3 5 6 4 8 9 1 9 10 2 10 11 3
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

