【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 天前
Pandas数据分析 【Series | DataFrame】
python·数据挖掘·数据分析·pandas
叫我:松哥2 天前
基于python的财务数据分析与可视化设计与实现
大数据·python·数据挖掘·数据分析·pandas·matplotlib
Zda天天爱打卡3 天前
【机器学习实战入门】使用Pandas和OpenCV进行颜色检测
大数据·人工智能·opencv·机器学习·计算机视觉·pandas
dandellion_4 天前
【数据分析(二)】初探 Pandas
数据挖掘·数据分析·pandas
能力工场小马哥5 天前
Pandas库的常用内容归纳
pandas
liuweidong08028 天前
【Pandas】pandas Series rtruediv
前端·javascript·pandas
新手小袁_J8 天前
Python实现简单的缺失值处理(超详细教程)
开发语言·python·信息可视化·numpy·pandas·matplotlib·pip
阿桨10 天前
pandas与sql对应关系【帮助sql使用者快速上手pandas】
sql·pandas
weixin_4046793111 天前
Xinference 常见bug: "detail": "Invalid input. Please specify the prompt."
开发语言·python·prompt·bug·pandas