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

Pandas DataFrame中按指定顺序查找数组匹配序列的索引

实现方案

你需要在token_2中查找与对应行token_1元素、顺序、连续性完全一致的子片段索引,原逻辑仅做了单元素存在性判断,没有校验连续顺序,用滑动窗口匹配即可实现需求。

完整代码

import pandas as pd

# 构造示例DataFrame
data = {'token_1': [['cat', 'run','today'],['dog', 'eat', 'meat']],
        'token_2': [['cat', 'in', 'the' , 'morning','cat', 'run', 'today',
                      'very', 'quick', 'cat','today', 'jump', 'and', 'run', 'run', 'cat', 'today'],['dog', 'eat', 'meat', 'chicken', 'from', 'bowl','dog','see','meat','eat']]}
df = pd.DataFrame(data)

def match_sequence(pattern, search_list):
    # 匹配串长度
    pattern_len = len(pattern)
    list_len = len(search_list)
    # 遍历所有可能的连续窗口起点
    for start_idx in range(list_len - pattern_len + 1):
        # 截取等长连续子序列做完全匹配
        if search_list[start_idx : start_idx + pattern_len] == pattern:
            return list(range(start_idx, start_idx + pattern_len))
    # 无匹配返回空列表
    return []

# 逐行执行匹配
result = [match_sequence(a, b) for a, b in zip(df['token_1'], df['token_2'])]
print(result)

运行后输出结果为:[[4, 5, 6], [0, 1, 2]],和预期结果完全一致。

逻辑说明

  • 采用固定长度滑动窗口遍历token_2,窗口长度和对应行的token_1长度相等
  • 每次截取窗口内的连续子序列,和token_1做全等判断,只有元素、顺序完全一致才判定为匹配
  • 如果单行存在多个符合要求的匹配片段,只需要把函数内的return逻辑改为将匹配结果追加到结果列表,即可返回所有匹配段的索引
  • 边界场景自动兼容:如果token_1长度大于token_2,函数会直接返回空列表,不会触发索引报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:54:23