讲师中心 微信公众号
AI工具推荐 视频效率加速

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

胖雪酱_4117

胖雪酱_4117

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

|

967人浏览过

|

来源于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"]])

输出结果与预期一致:

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
      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工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

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

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

320

2025.12.04

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

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

252

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

671

2026.04.13

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

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

6276

2023.08.14

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

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

18233

2025.10.16

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

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

433

2025.11.13

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

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

328

2025.12.30

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

323

2026.03.06

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

100

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn