在 Pandas 中,窗口函数(window functions)是用于对数据进行滚动、扩展或指数加权计算的工具。它们通过提供滑动窗口或累积视角,帮助分析数据中的局部趋势或历史累积效果。以下是关于 rolling、expanding 和 ewm 的简单介绍及常用场景:
1. 滚动窗口(Rolling)
pandas.DataFrame.rolling() 和 pandas.Series.rolling() 用于创建一个滚动窗口对象,对窗口内的数据执行统计计算。
功能:
- 在一段连续的窗口数据上应用函数(例如求和、均值等)。
- 窗口的大小是固定的,随着数据滑动。
常用场景:
- 时间序列分析:计算移动平均线(Moving Average),例如股票价格的5天移动平均。
- 平滑数据:消除数据中的短期波动,突出长期趋势。
- 计算局部统计量:例如窗口内的最大值、最小值、标准差等。
示例:
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6])
rolling = data.rolling(window=3)
print(rolling.mean()) # 计算3个元素的滚动平均
2. 扩展窗口(Expanding)
pandas.DataFrame.expanding() 和 pandas.Series.expanding() 用于创建扩展窗口对象,对从数据开始到当前点的累积数据应用函数。
功能:
- 对所有已观察的数据(从开始到当前位置)进行计算。
- 窗口大小动态增长,始终包括所有历史数据。
常用场景:
- 累积指标计算:例如累积和、累积均值。
- 累计贡献分析:跟踪从开始到当前点某些指标的贡献率。
示例:
expanding = data.expanding()
print(expanding.mean()) # 累积计算均值
3. 指数加权窗口(Exponential Moving Window,EWM)
pandas.DataFrame.ewm() 和 pandas.Series.ewm() 用于创建指数加权窗口,对数据赋予不同的权重(较近的点权重更高)。
功能:
- 指数加权移动平均线(EMA),与简单移动平均(SMA)相比,更重视最近的数据。
- 支持调整
span(跨度)、halflife(半衰期)等参数,灵活调整加权的模式。
常用场景:
- 金融分析:用于计算股票价格的指数加权移动均线(EMA)。
- 平滑时间序列:在噪声较大的数据中,使用指数加权方法可以更快地反应趋势变化。
- 预测建模:对历史数据赋予权重,用于加权预测。
示例:
ewm = data.ewm(span=3)
print(ewm.mean()) # 计算指数加权均值
对比总结
| 方法 | 窗口特性 | 适用场景 | 示例函数 |
|---|---|---|---|
| Rolling | 固定窗口 | 局部趋势分析、平滑短期波动 | .mean(), .sum() |
| Expanding | 动态扩展窗口 | 累积指标、历史数据贡献分析 | .mean(), .sum() |
| EWM | 权重递减窗口 | 强调最近数据、平滑时间序列 | .mean() |
这些窗口函数可以搭配自定义函数或内置函数(如 sum、mean、max)使用,非常适合时间序列分析和数据平滑处理。