【Pandas】pandas Series rolling

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)

pandas.Series.rolling

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

方法签名
python 复制代码
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:基本滚动窗口操作
python 复制代码
import pandas as pd

# 创建一个 Series
s = pd.Series([1, 2, 3, 4, 5])

# 使用 rolling 方法创建滚动窗口,并计算移动平均
result = s.rolling(window=2).mean()

print("基本滚动窗口操作结果:")
print(result)
输出结果:
python 复制代码
基本滚动窗口操作结果:
0    NaN
1    1.5
2    2.5
3    3.5
4    4.5
dtype: float64

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

示例2:指定最小观测值数量
python 复制代码
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)
输出结果:
python 复制代码
指定最小观测值数量结果:
0    1.0
1    1.5
2    2.5
3    3.5
4    4.5
dtype: float64

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

示例3:居中窗口
python 复制代码
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)
输出结果:
python 复制代码
居中窗口结果:
0    NaN
1    2.0
2    3.0
3    4.0
4    NaN
dtype: float64

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

示例4:使用不同窗口类型
python 复制代码
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)
输出结果:
python 复制代码
使用不同窗口类型结果:
0    NaN
1    NaN
2    2.0
3    3.0
4    4.0
dtype: float64

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

示例5:时间序列滚动窗口
python 复制代码
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)
输出结果:
python 复制代码
时间序列滚动窗口结果:
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 等)结合使用,以实现更复杂的数据分析任务。

相关推荐
程序猿零零漆1 小时前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十四)SpringMVC的请求处理
学习·spring·pandas
weixin_462446235 小时前
Python 使用 PyQt5 + Pandas 实现 Excel(xlsx)批量合并工具(带图形界面)
python·qt·pandas
橙露1 天前
从零基础到实战:Python 数据分析三剑客(Pandas+NumPy+Matplotlib)核心应用指南
python·数据分析·pandas
清水白石0082 天前
手写超速 CSV 解析器:利用 multiprocessing 与 mmap 实现 10 倍 Pandas 加速
python·pandas
Hello.Reader4 天前
PyFlink 向量化 UDF(Vectorized UDF)Arrow 批传输原理、pandas 标量/聚合函数、配置与内存陷阱、五种写法一网打尽
python·flink·pandas
Hello.Reader4 天前
PyFlink Table API Data Types DataType 是什么、UDF 类型声明怎么写、Python / Pandas 类型映射一文搞懂
python·php·pandas
Hello.Reader4 天前
PyFlink Table API 用户自定义函数(UDF)通用 UDF vs Pandas UDF、打包部署、open 预加载资源、读取作业参数、单元测试
log4j·pandas
海棠AI实验室5 天前
第十六章:小项目 2 CSV → 清洗 → 统计 → 图表 → 报告输出
pandas
逻极5 天前
数据分析项目:Pandas + SQLAlchemy,从数据库到DataFrame的丝滑实战
python·mysql·数据分析·pandas·sqlalchemy
海棠AI实验室5 天前
第十七章 调试与排错:读懂 Traceback 的方法论
python·pandas·调试