【Pandas】pandas Series rolling

ops/2025/1/22 7:39:24/

Pandas2.2 Series

Function application, GroupBy & window

方法描述
Series.apply()用于将一个函数应用到 Series 的每个元素或整个 Series
Series.agg()用于对 Series 数据进行聚合操作
Series.aggregate()用于对 Series 数据进行聚合操作
Series.transform()用于对 Series 数据进行转换操作
Series.map()用于将 Series 中的每个元素映射为新的值
Series.groupby()用于根据一个或多个键对 Series 进行分组
Series.rolling()用于创建一个滚动窗口对象(Rolling Window Object)

pandasSeriesrolling_14">pandas.Series.rolling

pandas.Series.rolling 是 Pandas 库中 Series 对象的一个方法,用于创建一个滚动窗口对象(Rolling Window Object)。通过这个对象,可以对 Series 数据进行滚动窗口操作,如计算移动平均、移动标准差等。滚动窗口操作在时间序列分析和数据平滑处理中非常有用。

方法签名
Series.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None, method='single')
  • window: 窗口大小,指定每个窗口包含的元素数量。可以是整数或偏移量。
  • min_periods: 最小观测值数量,默认为 None,表示等于 window 的大小。如果窗口中的非 NaN 值少于 min_periods,则结果为 NaN
  • center: 是否将窗口居中,默认为 False,表示窗口向后滚动;如果设置为 True,则窗口居中。
  • win_type: 窗口类型,默认为 None,表示使用矩形窗口。可以指定其他类型的窗口(如 'boxcar', 'triang', 'blackman', 'hamming', 'bartlett', 'parzen', 'bohman', 'blackmanharris', 'nuttall', 'barthann', 'kaiser', 'gaussian', 'general_gaussian', 'slepian', 'dpss')。
  • on: 指定按哪个列的时间戳进行滚动,默认为 None。仅适用于 DataFrame
  • axis: 指定轴,默认为 0,表示沿索引方向进行滚动。
  • closed: 指定窗口的边界是否包括端点,默认为 None。可选值有 'right', 'left', 'both', 'neither'
  • method: 计算方法,默认为 'single',表示单遍计算;也可以设置为 'table',表示表格计算。
主要特点
  • 滚动窗口:支持固定大小的滚动窗口操作。
  • 多种窗口类型:支持不同类型的窗口函数,适用于不同的应用场景。
  • 灵活配置:可以通过参数控制窗口大小、最小观测值数量、窗口位置等。
  • 时间序列支持:特别适用于时间序列数据的平滑处理和趋势分析。
示例及结果
示例1:基本滚动窗口操作
import pandas as pd# 创建一个 Series
s = pd.Series([1, 2, 3, 4, 5])# 使用 rolling 方法创建滚动窗口,并计算移动平均
result = s.rolling(window=2).mean()print("基本滚动窗口操作结果:")
print(result)
输出结果:
基本滚动窗口操作结果:
0    NaN
1    1.5
2    2.5
3    3.5
4    4.5
dtype: float64

在这个例子中,rolling(window=2) 创建了一个大小为 2 的滚动窗口,并对每个窗口内的元素计算了平均值。第一个元素没有足够的前驱元素形成窗口,因此结果为 NaN

示例2:指定最小观测值数量
import pandas as pd# 创建一个 Series
s = pd.Series([1, 2, 3, 4, 5])# 使用 rolling 方法创建滚动窗口,并指定最小观测值数量
result = s.rolling(window=2, min_periods=1).mean()print("指定最小观测值数量结果:")
print(result)
输出结果:
指定最小观测值数量结果:
0    1.0
1    1.5
2    2.5
3    3.5
4    4.5
dtype: float64

在这个例子中,min_periods=1 表示即使窗口内只有一个非 NaN 值,也会计算结果。因此,第一个元素的结果不再是 NaN,而是其自身值。

示例3:居中窗口
import pandas as pd# 创建一个 Series
s = pd.Series([1, 2, 3, 4, 5])# 使用 rolling 方法创建居中窗口,并计算移动平均
result = s.rolling(window=3, center=True).mean()print("居中窗口结果:")
print(result)
输出结果:
居中窗口结果:
0    NaN
1    2.0
2    3.0
3    4.0
4    NaN
dtype: float64

在这个例子中,center=True 表示窗口居中,即窗口中心位于当前元素。因此,第一个和最后一个元素没有足够的前后元素形成完整窗口,结果为 NaN

示例4:使用不同窗口类型
import pandas as pd# 创建一个 Series
s = pd.Series([1, 2, 3, 4, 5])# 使用 rolling 方法创建滚动窗口,并指定窗口类型
result = s.rolling(window=3, win_type='triang').mean()print("使用不同窗口类型结果:")
print(result)
输出结果:
使用不同窗口类型结果:
0    NaN
1    NaN
2    2.0
3    3.0
4    4.0
dtype: float64

在这个例子中,win_type='triang' 指定了三角窗函数,窗口内的权重分布为三角形,从而影响了移动平均的计算结果。

示例5:时间序列滚动窗口
import pandas as pd# 创建一个带有时间戳索引的 Series
dates = pd.date_range('2023-01-01', periods=5)
s = pd.Series([1, 2, 3, 4, 5], index=dates)# 使用 rolling 方法按时间戳滚动,并计算移动平均
result = s.rolling('2D').mean()print("时间序列滚动窗口结果:")
print(result)
输出结果:
时间序列滚动窗口结果:
2023-01-01    1.0
2023-01-02    1.5
2023-01-03    2.5
2023-01-04    3.5
2023-01-05    4.5
Freq: D, dtype: float64

在这个例子中,rolling('2D') 表示按两天的时间窗口进行滚动,并对每个窗口内的元素计算了平均值。

总结

pandas.Series.rolling 方法在数据分析和处理中非常有用,特别是在需要对时间序列数据进行平滑处理和趋势分析时。它支持多种窗口类型、灵活配置窗口大小和位置,并且可以与聚合函数结合使用以实现复杂的滚动窗口操作。通过这些示例,可以看到 rolling() 方法在不同场景下的应用及其强大功能。

请注意,rolling 方法通常与其他聚合函数(如 mean, sum, std 等)结合使用,以实现更复杂的数据分析任务。


http://www.ppmy.cn/ops/152134.html

相关文章

c# PDF文件合并工具

界面 主要用于发票PDF文件的合并。经常出差要报销的很有用。 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System…

【RabbitMQ 消息丢失常见情况分析】

RabbitMQ 消息丢失分析:常见场景与解决策略 RabbitMQ 作为一种流行的消息队列中间件,广泛应用于各类分布式系统中。它通过发布/订阅模式解耦了生产者和消费者,提高了系统的可扩展性和可靠性。然而,在实际应用中,消息丢失仍然是一个亟待关注的问题。本文将探讨导致 Rabbit…

Android studio开发实战之碎片Fragment

一、碎片化的概念 碎片化(Fragment)是 Android 应用开发中的一个重要概念,它的设计初衷是增强界面模块化,便于开发者灵活构建和管理复杂的界面。 什么是模块化? 将应用界面拆分成多个可复用的小模块(Fragm…

Vue平台开发三——项目管理页面

前言 对于多个项目的使用,可能需要进行项目切换管理,所以这里创建一个项目管理页面,登录成功后跳转这个页面,进行选择项目,再进入Home页面展示对应项目的内容。 一、实现效果图预览 二、页面内容 功能1、项目列表展…

Mybatis 进阶 / Mybatis—Puls (详细)

目录 一.动态SQL 1.1标签 1.2 标签 1.3标签 1.4标签 1.5标签 1.6标签 mybatis总结: 二.Mybatis-Puls 2.1准备工作 2.2CRUD单元测试 2.2.1创建UserInfo实体类 2.2.2编写Mapper接⼝类 2.2.3 测试类 2.3 常见注解 2.3.1TableName 2.3.2TableField 2.4打印日…

Vue3 中使用组合式API和依赖注入实现自定义公共方法

组合式API 1.在项目根目录 src 文件夹下创建文件夹 utils ,创建 index.js 文件 2.抛出想要对外暴露的方法,以下是一个判断数据类型的方法 export function getType(params) {// 判断是否是基本类型let res typeof paramsif (res ! object) {return re…

ubuntu_查询连接当前服务器的用户ip

在Ubuntu系统中,如果你想查询当前连接到服务器的用户的IP地址,你可以通过以下几种方法来实现: 1. 使用last和awk命令 last命令可以显示最近登录到系统的用户信息,包括他们的IP地址(如果他们是远程登录的)…

Linux 时间操作详解

Linux 时间操作详解 1. Linux 中的时间概念2. time_t:表示时间的基本数据类型示例代码:获取当前时间 3. 格式化时间:tm 结构体与 localtime() 函数示例代码:将 time_t 转换为本地时间 4. 高精度时间操作:chrono 库示例…