0

0

Pandas 中实现带最小窗口约束与条件重置的滚动均值指示器

花韻仙語

花韻仙語

发布时间:2026-02-05 17:37:01

|

947人浏览过

|

来源于php中文网

原创

Pandas 中实现带最小窗口约束与条件重置的滚动均值指示器

本文介绍如何为 pandes dataframe 的每列构建一个动态符号指示器(1 或 -1),该指示器在当前值 ≥ 指定倍数 × 当前滚动均值时翻转,并强制要求每次重置前滚动窗口至少包含指定最小观测数。

在时间序列分析或信号检测类任务中,常需根据局部统计量(如滚动均值)的动态变化触发状态切换。本教程解决一个典型场景:对每一列独立维护一个累积滚动均值窗口,当某行值满足 value ≥ multiple × current_rolling_mean 且窗口长度已达最小阈值(min_count)时,重置窗口并翻转指示器符号(+1 ↔ −1)。该逻辑无法直接通过 pd.Series.rolling().mean() 实现,因其依赖状态记忆(当前符号、累计和、计数),需逐行迭代处理。

以下是一个清晰、可复用的纯 Python 实现:

import pandas as pd

def rolling_mean_indicator(col, start=1, multiple=2, min_count=4):
    """
    生成滚动均值触发的符号指示器序列。

    Parameters:
    -----------
    col : pd.Series or array-like
        输入列数据
    start : int, default 1
        初始指示器值(1 或 -1)
    multiple : float, default 2
        触发翻转的倍数阈值
    min_count : int, default 4
        允许触发重置所需的最小连续观测数

    Yields:
    -------
    int : 当前行对应的指示器值(1 或 -1)
    """
    curr = start
    num_obs = 0
    acc = 0.0

    for v in col:
        acc += v
        num_obs += 1

        if num_obs < min_count:
            yield curr
            continue

        mean_val = acc / num_obs
        if v >= multiple * mean_val:
            curr *= -1
            num_obs = 0
            acc = 0.0

        yield curr

# 示例数据
df = pd.DataFrame({
    "A": [0.1, 0.1, 0.15, 0.1, 0.1, 0.7, 0.1, 0.1, 0.5, 1, 0.1, 0.1],
    "B": [0.1, 0.1, 0.4, 0.1, 0.8, 0.1, 0.1, 0.1, 0.1, 0.1, 0.9, 0.1],
})

# 应用函数
df["A_ind"] = list(rolling_mean_indicator(df["A"]))
df["B_ind"] = list(rolling_mean_indicator(df["B"]))

print(df[["A", "B", "A_ind", "B_ind"]])

输出结果与预期一致:

秘塔写作猫
秘塔写作猫

秘塔写作猫是一个集AI写作、校对、润色、配图等为一体的创作平台

下载
      A    B  A_ind  B_ind
0  0.10  0.1      1      1
1  0.10  0.1      1      1
2  0.15  0.4      1      1
3  0.10  0.1      1      1
4  0.10  0.8      1     -1
5  0.70  0.1     -1     -1
6  0.10  0.1     -1     -1
7  0.10  0.1     -1     -1
8  0.50  0.1     -1     -1
9  1.00  0.1      1     -1
10 0.10  0.9      1      1
11 0.10  0.1      1      1

关键逻辑说明:

  • 窗口是累积型(非滑动窗):从上一次重置后首行开始累加,直到触发条件才清空;
  • min_count 是硬性约束:即使满足 v ≥ multiple × mean,若 num_obs
  • 重置即清零 acc 和 num_obs,下一行重新开始累积(而非跳过);
  • 指示器仅在重置发生时翻转,其余时间保持当前值。

性能优化建议(大数据集必选):
对万行以上数据,推荐使用 numba JIT 加速。只需添加 @njit 装饰器并返回 NumPy 数组:

from numba import njit
import numpy as np

@njit
def rolling_mean_indicator_numba(col, start=1, multiple=2, min_count=4):
    curr = start
    num_obs = 0
    acc = 0.0
    out = np.empty(len(col), dtype=np.int8)

    for i in range(len(col)):
        v = col[i]
        acc += v
        num_obs += 1

        if num_obs < min_count:
            out[i] = curr
            continue

        mean_val = acc / num_obs
        if v >= multiple * mean_val:
            curr *= -1
            num_obs = 0
            acc = 0.0

        out[i] = curr

    return out

# 使用方式(注意传入 .values)
df["A_ind_fast"] = rolling_mean_indicator_numba(df["A"].values)
df["B_ind_fast"] = rolling_mean_indicator_numba(df["B"].values)

此方案兼顾可读性与工程实用性,适用于金融信号生成、异常脉冲检测、自适应阈值控制系统等场景。注意:该逻辑本质为在线单次遍历算法,不支持向量化回溯,但正因如此,它天然适配流式数据处理。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

72

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

3

2026.01.31

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

427

2023.08.14

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

104

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

92

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

30

2025.12.30

微信网页版文件传输助手教程合集
微信网页版文件传输助手教程合集

本专题整合了微信网页版文件传输助手教程、入口等等内容,阅读专题下面的文章了解更多详细内容。

15

2026.02.04

微信文件过期恢复教程
微信文件过期恢复教程

本专题整合了微信文件过期恢复方法、技巧教程,阅读专题下面的文章了解更多详细内容。

10

2026.02.04

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

93

2026.02.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号