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

如何基于major_check值在minor_check中匹配特定序列并验证金融数据规则

基于Pandas的模式匹配与价格验证实现方案

核心方案思路

用Pandas的移位(shift)和布尔索引实现全向量化操作,彻底替代循环遍历;先统一处理minor_check中的NaN值,解决空值干扰问题。

步骤1:数据预处理

先把minor_check里的NaN替换为0,统一数值类型:

df['minor_check'] = df['minor_check'].fillna(0).astype(int)

步骤2:匹配目标模式

针对major_check的两种触发场景,分别生成模式匹配的布尔掩码:

场景1:major_check == 2,匹配21[2]12模式

模式对应位置:中心行(触发major_check=2的行)前2行依次为2、1,后2行依次为1、2

mask_2 = (
    (df['major_check'] == 2)
    & (df['minor_check'].shift(2) == 2)
    & (df['minor_check'].shift(1) == 1)
    & (df['minor_check'] == 2)
    & (df['minor_check'].shift(-1) == 1)
    & (df['minor_check'].shift(-2) == 2)
)

场景2:major_check == 1,匹配12[1]21模式

模式对应位置:中心行(触发major_check=1的行)前2行依次为1、2,后2行依次为2、1

mask_1 = (
    (df['major_check'] == 1)
    & (df['minor_check'].shift(2) == 1)
    & (df['minor_check'].shift(1) == 2)
    & (df['minor_check'] == 1)
    & (df['minor_check'].shift(-1) == 2)
    & (df['minor_check'].shift(-2) == 1)
)

步骤3:提取匹配的中心行

合并两种场景的掩码,得到所有符合模式的中心行索引:

matched_centers = df[mask_2 | mask_1].index

步骤4:验证价格数据规则

批量提取所有匹配模式对应的5行数据,用向量化方式验证价格规则:

import numpy as np

# 收集所有需要验证的行索引(每个中心行对应前2、自身、后2行)
valid_row_indices = []
for center in matched_centers:
    valid_row_indices.extend([center-2, center-1, center, center+1, center+2])

# 去重并排序,避免重复索引
valid_row_indices = sorted(list(set(valid_row_indices)))
price_subset = df.loc[valid_row_indices, ['open', 'high', 'low', 'close']]

# 按5行一组拆分,替换为你的具体价格规则验证逻辑
# 示例:验证每组5行的low值是否连续递增
price_groups = price_subset.groupby(np.arange(len(price_subset)) // 5)
passed_groups = price_groups.apply(lambda x: (x['low'].diff().dropna() > 0).all())

# 最终得到符合模式且通过价格验证的中心行
final_valid_centers = matched_centers[passed_groups.values]

关键优势说明

  • 全程采用Pandas向量化操作,执行效率远高于循环遍历DataFrame
  • 提前统一处理NaN为0,消除空值对模式匹配的干扰
  • shift()操作精准定位模式的前后行位置,完全匹配需求中的模式结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:02:42