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

Python实现DataFrame中连续3个及以上数字匹配查询

从DataFrame中查找包含连续匹配序列的行

需求:现有两个pandas DataFrame,需从df1的数字序列中,筛选出df2里包含连续3个及以上匹配数字的行。示例中df1的序列为[2,4,6,8,9,10],df2包含多条数据,目标结果是包含连续匹配数字8、9、10的Id为6的行。

初始化数据

import pandas as pd 

# 初始化df1:单一行的数字序列
cols = ['Num1','Num2','Num3','Num4','Num5','Num6']
df1 = pd.DataFrame([[2,4,6,8,9,10]], columns=cols)

# 初始化df2:包含Id和数字序列的多行数据
df2 = pd.DataFrame([[1,1,2,4,5,6,8],
                    [2,5,6,20,22,23,34],
                    [3,8,12,13,34,45,46],
                    [4,9,10,14,29,32,33],
                    [5,1,22,13,23,33,35],
                    [6,1,6,7,8,9,10],
                    [7,0,2,3,5,6,8]], 
                   columns=['Id','Num1','Num2','Num3','Num4','Num5','Num6'])

实现逻辑代码

# 提取df1的数字序列为列表
df1_sequence = df1.iloc[0].tolist()

# 生成df1中所有长度≥3的连续子序列
min_length = 3
target_subsequences = []
for i in range(len(df1_sequence) - min_length + 1):
    # 先加入长度为3的子序列
    target_subsequences.append(tuple(df1_sequence[i:i+min_length]))
    # 再加入更长的连续子序列(长度4、5、6)
    for l in range(min_length+1, len(df1_sequence)-i+1):
        target_subsequences.append(tuple(df1_sequence[i:i+l]))

# 定义函数:检查一行的数字序列是否包含目标连续子序列
def has_matching_subsequence(row):
    row_sequence = row[1:].tolist()  # 跳过Id列,提取数字部分
    # 生成当前行所有长度≥3的连续子序列
    row_subsequences = []
    for i in range(len(row_sequence) - min_length + 1):
        for l in range(min_length, len(row_sequence)-i+1):
            row_subsequences.append(tuple(row_sequence[i:i+l]))
    # 检查是否存在匹配的子序列
    return any(subseq in target_subsequences for subseq in row_subsequences)

# 筛选df2中符合条件的行
results = df2[df2.apply(has_matching_subsequence, axis=1)]

print(results)

输出结果

Id  Num1  Num2  Num3  Num4  Num5  Num6
5   6     1     6     7     8     9    10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:30:20