Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Python如何计算移动窗口统计量?rolling函数详解_创想鸟

Python如何计算移动窗口统计量?rolling函数详解

pandas的rolling()函数用于计算移动窗口统计量,常见聚合操作有1. .mean()计算移动平均值,2. .sum()计算移动总和,3. .std()计算移动标准差,4. .min()/.max()计算极值,5. .count()计算非nan数量,6. .median()计算移动中位数;窗口可定义为固定观测值或时间窗如’3d’、’2h’,且支持自定义函数通过.apply()应用,例如计算窗口范围或非零值计数;处理缺失值时,默认要求窗口内数据点等于window大小才计算,但可通过设置min_periods参数指定最小非nan数量,如设为1则允许窗口内只要有数据即计算,从而减少结果中的nan数量。

Python如何计算移动窗口统计量?rolling函数详解

在Python中处理时间序列或任何顺序数据时,计算移动窗口统计量是家常便饭,它能帮助我们平滑数据、识别趋势或波动。Pandas库中的rolling()函数就是为此而生的核心工具。它能让你定义一个滑动的数据窗口,然后对这个窗口内的数据执行各种聚合操作,比如计算平均值、总和、标准差等等,非常灵活和高效。

Python如何计算移动窗口统计量?rolling函数详解

解决方案

使用Pandas的rolling()函数来计算移动窗口统计量。这个函数通常会链式调用其他聚合方法,例如.mean()、.sum()、.std()等。它的核心在于window参数,它定义了窗口的大小。

import pandas as pdimport numpy as np# 创建一个示例Seriesdata = pd.Series(np.random.rand(20) * 100)# 计算5个元素的移动平均值rolling_mean = data.rolling(window=5).mean()print("5个元素的移动平均值:n", rolling_mean)# 计算3个元素的移动和rolling_sum = data.rolling(window=3).sum()print("n3个元素的移动和:n", rolling_sum)# 计算7个元素的移动标准差rolling_std = data.rolling(window=7).std()print("n7个元素的移动标准差:n", rolling_std)# 对于DataFrame,可以在特定列上应用df = pd.DataFrame({'A': np.random.rand(20), 'B': np.random.randint(0, 100, 20)})df['rolling_A_mean'] = df['A'].rolling(window=4).mean()print("nDataFrame上A列的4个元素移动平均值:n", df)

rolling()函数返回一个Rolling对象,这个对象本身不会立即计算结果,而是等待你指定一个聚合函数(如.mean()、.sum()、.apply()等)后才进行实际计算。这种设计使得它非常高效,因为它允许你链式地应用不同的聚合逻辑。

立即学习“Python免费学习笔记(深入)”;

Python如何计算移动窗口统计量?rolling函数详解

Pandas rolling()函数的基本用法和常见聚合操作有哪些?

当你拿到一串数据,想看看它在某个时间段或者某个连续序列中的表现时,rolling()函数就显得格外好用。它的基本用法其实挺直观的,就是先用rolling()定义窗口,再跟上你想要的聚合方法。

最基础的,你得告诉rolling()你的窗口有多大,这就是window参数。比如,window=5就意味着每次取最近的5个数据点来计算。这个窗口可以是固定数量的观测值,也可以是时间段(如果你的数据是时间序列的话)。

Python如何计算移动窗口统计量?rolling函数详解

常见的聚合操作,我平时用得最多的无非就是那么几个:

.mean(): 计算移动平均值,这是最常用的,能有效平滑数据,看出趋势。.sum(): 计算移动总和,比如你想知道过去7天的销售额总和。.std(): 计算移动标准差,这能帮你理解数据的波动性,比如股票价格的波动。.min() / .max(): 计算移动最小值/最大值,找出窗口内的极值。.count(): 计算窗口内的非NaN值的数量,这在处理缺失值时挺有用。.median(): 计算移动中位数,对异常值更鲁豫。

举个例子,如果你有一天的每小时温度数据,想看看过去3小时的平均温度,或者过去24小时的最高温度,rolling().mean()和rolling().max()就能轻松搞定。

# 延续上面的data Seriesprint("原始数据:n", data.head(10))# 3个元素的移动最小值rolling_min = data.rolling(window=3).min()print("n3个元素的移动最小值:n", rolling_min.head(10))# 4个元素的移动中位数rolling_median = data.rolling(window=4).median()print("n4个元素的移动中位数:n", rolling_median.head(10))

注意,在窗口的初始阶段,也就是数据点不足以填满整个窗口时,rolling()默认会返回NaN。这很正常,毕竟它还没攒够足够的数据来计算完整的窗口统计量。

如何处理移动窗口中的缺失值?min_periods参数有什么用?

处理数据,尤其是真实世界的数据,缺失值总是避不开的话题。在计算移动窗口统计量时,如果窗口内有缺失值,或者窗口一开始数据不够,rolling()的默认行为是返回NaN。这在很多情况下是合理的,因为你可能确实需要一个完整的窗口才能进行有效计算。

但有时候,你可能希望即使窗口内的数据点不足,只要达到某个最小数量,就进行计算。这时,min_periods参数就派上用场了。

min_periods定义了窗口内进行计算所需的最小非NaN观测值数量。

默认行为: 如果不设置min_periods,它的默认值就是window的大小。这意味着,只有当窗口内有足够的数据点(等于window大小)时,才会返回一个非NaN的结果。比如,rolling(window=5).mean(),前4个结果都会是NaN。自定义min_periods: 如果你设置min_periods=1,那么只要窗口内至少有一个非NaN值,就会进行计算。这在处理时间序列的开头部分特别有用,可以避免过多的NaN值。

举个例子,我经常在处理一些传感器数据时遇到这种情况,数据流刚开始的时候可能不稳定,或者中间偶尔有几秒钟的数据缺失。如果我用min_periods=1,那么即使窗口不完整,我依然能得到一个近似的统计量,这对于实时监控或者快速趋势判断很有帮助。当然,你需要权衡精度和可用性。

# 示例数据,包含一些NaNdata_with_nan = pd.Series([1, 2, np.nan, 4, 5, 6, np.nan, 8, 9, 10])# 窗口大小为3,默认min_periods=3rolling_default_min_periods = data_with_nan.rolling(window=3).mean()print("默认min_periods (3):n", rolling_default_min_periods)# 解释:第一个非NaN值出现在索引2 (4.0),因为它前面有两个NaN,所以第一个有效计算是 (NaN, NaN, 4) -> NaN。# 接着 (NaN, 4, 5) -> NaN。# (4, 5, 6) -> 5.0# (5, 6, NaN) -> NaN# (6, NaN, 8) -> NaN# (NaN, 8, 9) -> NaN# (8, 9, 10) -> 9.0# 窗口大小为3,min_periods=1rolling_custom_min_periods = data_with_nan.rolling(window=3, min_periods=1).mean()print("n自定义min_periods (1):n", rolling_custom_min_periods)# 解释:# [1] -> 1.0# [1, 2] -> 1.5# [2, NaN] -> 2.0 (因为NaN被忽略了,只计算2)# [NaN, 4] -> 4.0# [4, 5] -> 4.5# [4, 5, 6] -> 5.0# [5, 6, NaN] -> 5.5# [6, NaN, 8] -> 7.0# [NaN, 8, 9] -> 8.5# [8, 9, 10] -> 9.0

通过对比你会发现,min_periods极大地影响了结果中NaN的出现位置和数量,这取决于你对数据完整性的要求。

除了固定大小窗口,rolling()还能如何定义窗口?时间窗和自定义函数

rolling()的强大之处远不止于固定数量的观测值窗口。对于时间序列数据,它真正闪耀的地方在于支持“时间窗”定义。这意味着你可以指定一个时间长度,比如“过去7天”或“最近3小时”,而不是“过去5个数据点”。这在处理不规则采样或需要基于实际时间进行分析的数据时,简直是天赐之物。

要使用时间窗,你的Series或DataFrame的索引必须是DatetimeIndex。window参数这时接受一个字符串,比如'3D'表示3天,'7D'表示7天,'1H'表示1小时等等。Pandas会自动根据时间戳来确定哪些数据点落在当前窗口内。

# 创建一个时间序列数据dates = pd.date_range(start='2023-01-01', periods=15, freq='H')time_series_data = pd.Series(np.random.randint(1, 100, 15), index=dates)print("时间序列数据:n", time_series_data)# 计算2小时的移动平均值rolling_2h_mean = time_series_data.rolling(window='2H').mean()print("n2小时的移动平均值:n", rolling_2h_mean)# 计算5小时的移动总和,最小周期为1rolling_5h_sum = time_series_data.rolling(window='5H', min_periods=1).sum()print("n5小时的移动总和 (min_periods=1):n", rolling_5h_sum)

除了内置的聚合函数,rolling()还支持通过.apply()方法传入自定义函数。这意味着你可以对窗口内的数据执行任何你想要的复杂逻辑。你的自定义函数会接收一个Series或DataFrame的子集作为输入,然后返回一个标量值。这为数据分析提供了极大的灵活性,比如计算窗口内的众数、某个特定百分位数,或者执行更复杂的统计检验。

# 自定义函数:计算窗口内的范围 (最大值 - 最小值)def calculate_range(x):    return x.max() - x.min()# 应用自定义函数rolling_range = time_series_data.rolling(window='3H', min_periods=2).apply(calculate_range)print("n3小时窗口的移动范围 (最大值-最小值):n", rolling_range)# 另一个例子:计算窗口内非零值的计数def count_non_zero(x):    return (x != 0).sum()data_with_zeros = pd.Series([1, 0, 3, 0, 5, 6, 0, 8, 9, 0])rolling_non_zero_count = data_with_zeros.rolling(window=3, min_periods=1).apply(count_non_zero)print("n3个元素窗口的非零值计数:n", rolling_non_zero_count)

通过时间窗和自定义函数,rolling()函数几乎可以满足你在移动窗口统计方面的所有需求,无论是简单的平均值,还是复杂的数据模式识别,它都能提供一个优雅且高效的解决方案。

以上就是Python如何计算移动窗口统计量?rolling函数详解的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1365720.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python如何实现基于神经过程的不确定性异常评分?
上一篇 2025年12月14日 04:46:20
如何使用Dask实现大规模数据的分布式异常检测?
下一篇 2025年12月14日 04:46:30

相关推荐

  • win10打开方式列表里有重复项怎么办_win10打开方式重复项清理方法

    首先通过设置应用重置默认程序,其次可编辑注册表删除重复项,最后可用第三方工具清理;三种方法依次操作可彻底解决Windows 10右键“打开方式”中程序重复问题。 如果您在Windows 10系统中右键点击文件时,发现“打开方式”列表里出现了多个相同的程序选项,这不仅影响操作效率,还可能导致误选。以下…

    2026年9月23日
    300
  • 微信小店怎么设置小程序?微信小程序卖东西怎么弄

    随着线上零售的兴起,越来越多商家开始重视线上渠道。作为国内最大的社交平台之一,微信凭借其庞大的用户基础,推出了微信小店小程序功能。本文将为您详细讲解如何配置微信小店小程序,助您轻松开展线上销售业务。 一、微信小店小程序的特点 1. 用户规模庞大:微信拥有超过10亿活跃用户,为商家提供广阔的市场空间。…

    2026年9月23日
    300
  • 如何在ArtRage中使用AI裁剪图片?快速掌握精准裁剪的技巧

    ArtRage不支持AI裁剪,但可先用稿定设计等AI工具智能裁剪图片,再导入ArtRage进行绘画创作,弥补其裁剪功能简单、无智能识别的不足,结合AI高效预处理与ArtRage真实笔触优势,提升数字绘画效率。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R…

    2026年9月23日
    400
  • VSCode搭建C++编程环境 手把手教你配置VSCode运行C++

    首先确保已正确配置mingw-w64并将其bin目录添加到系统环境变量path中,1. 检查c_cpp_properties.json中的”include path”是否包含头文件路径;2. 确认tasks.json中使用-i选项指定头文件路径;3. 验证编译器能否通过命令行…

    2026年9月23日
    700
  • 使用 Mp4Parser Java API 创建可播放 MP4 文件的教程

    本文档旨在指导开发者使用 Mp4Parser Java API 创建可播放的 MP4 文件。通过一个简单的复制 MP4 文件结构的例子,深入理解 Mp4Parser 的核心概念和使用方法,帮助开发者避免常见错误,并为更复杂的 MP4 文件操作打下基础。本文将重点讲解如何正确复制 MP4 文件的关键 …

    2026年9月23日
    500
  • 个人微信小店怎么样?如何开微信网店

    微信已成为现代人生活中必不可少的社交工具。而微信小店作为其生态体系中的重要组成部分,凭借便捷高效的购物方式,正逐渐在电商领域占据一席之地。本文将围绕个人微信小店的优势、运营策略及未来发展趋势展开分析。 一、个人微信小店的优势 1. 入门门槛低、操作便捷 相比传统电商平台,开设个人微信小店无需支付高昂…

    2026年9月23日
    500
  • iPhoneXS密码设置失败怎么办?解决密码设置问题的实用方法

    iPhone XS密码设置失败通常由触控问题、系统缓存或设置冲突引起,首先检查屏幕清洁度并取下劣质膜,尝试重启或强制重启设备;若无效,可还原所有设置、更新iOS系统或关闭辅助功能;若界面卡顿,优先强制重启并检查后台进程与存储空间;当所有方法均失败时,需通过“抹掉所有内容和设置”恢复出厂设置,或使用电…

    2026年9月23日
    500
  • 抖音切换账号总是失败怎么办 抖音多账号登录异常修复方法

    抖音切换账号失败通常由网络、软件版本、账号状态或平台风控导致。首先确认网络通畅并更新至最新版本,清除缓存或数据可解决应用异常;检查目标账号是否在登录列表中,避免因删除记录或未绑定手机号导致无法切换;若账号被封禁或注销,需通过安全中心核实;频繁切换或异地登录可能触发平台限制,建议减少操作频率并使用稳定…

    2026年9月23日
    600
  • VSCode 怎样调试 Python 程序步骤详解 VSCode 调试 Python 程序的详细步骤​

    安装python扩展是vscode调试python程序的前提,确保vscode具备python语言支持;2. 打开python文件后,在代码行号旁点击设置断点,程序将在该处暂停执行;3. 通过点击“运行和调试”图标并创建launch.json文件,选择“python file”配置,实现对当前文件的…

    2026年9月23日
    300
  • 基础服务系列-Jupyter Notebook 支持Java

    下载并安装ijava内核以在jupyter notebook中支持java编程。以下是详细步骤: 首先,使用wget命令下载IJava的压缩包: wget https://github.com/SpencerPark/IJava/releases/download/v1.3.0/ijava-1.3.…

    2026年9月23日
    300
  • windows10怎么查看显卡的显存大小_windows10显卡显存查看方法

    windows10怎么查看显卡的显存大小_windows10显卡显存查看方法windows10怎么查看显卡的显存大小_windows10显卡显存查看方法windows10怎么查看显卡的显存大小_windows10显卡显存查看方法windows10怎么查看显卡的显存大小_windows10显卡显存查看方法

    1、通过系统设置可查看显存大小:右键桌面→显示设置→高级显示设置→显示适配器属性→适配器选项卡中“专用视频内存”即为显存容量。2、任务管理器也可查看:打开任务管理器→性能选项卡→GPU→右侧信息栏中“专用 GPU 内存”显示总量。3、运行dxdiag工具:Win+R输入dxdiag→显示选项卡中“显…

    2026年9月23日 • 用户投稿
    700
  • MidJourney的AI混合工具怎么用?打造高质量艺术图像的完整指南

    /blend命令能融合2-5张图像生成创意新图,关键在于选择有关联的图像并用文本提示引导方向,结合–ar、–style、–v等参数可精细控制风格、构图与版本,通过调整图片顺序、数量及迭代混合能优化结果,实现艺术化视觉重组。 ☞☞☞AI 智能聊天, 问答助手, AI…

    2026年9月23日
    000
  • mysql在哪里输入创建表语句 mysql代码执行环境介绍

    mysql在哪里输入创建表语句 mysql代码执行环境介绍mysql在哪里输入创建表语句 mysql代码执行环境介绍mysql在哪里输入创建表语句 mysql代码执行环境介绍mysql在哪里输入创建表语句 mysql代码执行环境介绍

    选择mysql客户端需根据工作习惯和需求决定。①若喜欢敲命令,可选mysql自带命令行客户端,轻量直接但需记忆命令;②若偏好图形界面,navicat或dbeaver更直观,支持可视化操作,其中dbeaver跨平台且支持多数据库;③其他常用工具如sql developer(适合oracle用户)、da…

    2026年9月23日 • 用户投稿
    200
  • 使用正则表达式实现字符串大小写不敏感替换

    本文将介绍如何利用正则表达式,高效、简洁地实现字符串中特定单词的大小写不敏感替换,从而将所有形式的单词统一转换为指定大小写。通过运用正则表达式的“不区分大小写”模式,可以避免为每种大小写变体编写单独的替换条件,极大提升代码的简洁性和可维护性。 在编程实践中,我们经常会遇到需要将字符串中某个单词的所有…

    2026年9月23日
    500
  • 如何锁定Debian软件版本 apt-mark hold使用说明

    如何锁定Debian软件版本 apt-mark hold使用说明如何锁定Debian软件版本 apt-mark hold使用说明如何锁定Debian软件版本 apt-mark hold使用说明如何锁定Debian软件版本 apt-mark hold使用说明

    apt-mark hold 是 apt 工具中用于锁定软件包版本、防止其被自动升级的命令。1. 通过 sudo apt-mark hold 包名 可锁定指定包;2. 使用 apt-mark showhold 可查看当前锁定的包;3. 执行 sudo apt-mark unhold 包名 可解除锁定。…

    2026年9月23日 • 用户投稿
    000
  • 古墓丽影崛起绳索箭矢怎么获得 绳索箭矢获取方法

    在《古墓丽影:崛起》中,绳索箭矢的获取是主线流程中的关键节点,发生在苏联监狱关卡。此时劳拉被俘,双手被缚,需按操作提示靠近牢房角落的金属水管,使用互动键将其掰断,获得临时近战武器。 接着,利用该水管猛烈击打牢房内侧墙壁上的木质结构,直至墙面破裂,形成一个可通行的小洞。穿过破洞进入相邻的看守房间,在桌…

    2026年9月23日
    900
  • VSCode如何配置RISC-V开发环境 VSCode嵌入式开发的特殊设置

    解决方案的核心是选择合适的risc++-v gnu toolchain并将其bin目录添加到系统path,确保vscode能调用交叉编译器;2. 安装c/c++扩展和cortex-debug等调试扩展,通过c_cpp_properties.json配置头文件路径、宏定义和编译器路径,实现准确的智能感…

    2026年9月23日
    700
  • 三星S24 Ultra对决谷歌Pixel 8 Pro:AI手机的实际应用体验,谁的智能功能更能融入日常使用场景?

    S24 Ultra在功能广度和多场景覆盖上占优,适合追求全能生产力的用户;Pixel 8 Pro凭借简洁交互与谷歌生态深度融合,提供更流畅高效的AI体验,尤其在影像编辑和日常沟通中表现突出。两者均非噱头,而是实用工具:S24 Ultra强于实时翻译、笔记处理与跨语言交流,支持锁屏快速启动和要点提炼,…

    2026年9月23日
    1000
  • 如何在PaintShopPro中使用AI裁剪图片?快速掌握图像裁剪技巧

    如何在PaintShopPro中使用AI裁剪图片?快速掌握图像裁剪技巧如何在PaintShopPro中使用AI裁剪图片?快速掌握图像裁剪技巧如何在PaintShopPro中使用AI裁剪图片?快速掌握图像裁剪技巧如何在PaintShopPro中使用AI裁剪图片?快速掌握图像裁剪技巧

    PaintShop Pro虽无“AI裁剪”按钮,但可通过智能选择工具(如智能选择画笔、魔术棒)精准分离主体,结合内容感知填充实现背景移除或扩展,最终用裁剪工具优化构图,形成“先智能处理、后精准裁剪”的高效工作流。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek…

    2026年9月23日 • 用户投稿
    600
  • 如何在mysql中使用连接池提升并发

    连接池通过复用数据库连接减少开销,提升高并发下系统性能;需根据语言选择HikariCP、SQLAlchemy等组件,合理配置最大连接数、空闲连接等参数,并结合数据库优化与监控调优以充分发挥效果。 在高并发场景下,频繁创建和销毁数据库连接会带来显著的性能开销。MySQL本身不直接提供连接池功能,但可以…

    2026年9月23日
    200

发表回复

登录后才能评论
关注微信