python窗口函数
时间: 2025-01-03 19:29:44 浏览: 5
### Python 中窗口函数的概念
Pandas 库提供了多种用于时间序列分析和其他数据分析场景下的窗口操作工具。这些工具可以分为三类:滚动窗口(Rolling Window)、扩展窗口(Expanding Window)以及指数加权窗口(Exponentially Weighted Windows)。这类函数允许对数据集执行滑动窗口计算,从而能够更灵活地处理数值型数据[^1]。
### 滚动窗口 (Rolling)
`rolling()` 方法创建了一个 Rolling 对象,该对象代表一个定宽的移动窗口。通过调用此方法并指定窗口大小参数 `window` 后,可链式调用其他聚合函数如 `.mean()`, `.sum()`, 或者自定义统计量来进行计算。这使得开发者能够在保持原有 DataFrame 结构的同时轻松获取到基于不同位置上固定长度子样本的结果集合[^2]。
#### 示例代码展示如何应用 rolling 函数:
```python
import pandas as pd
import numpy as np
# 创建示例数据框
df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
print("原始数据:")
print(df)
# 使用 rolling 计算均值,默认情况下会跳过 NaN 值
result_mean = df.rolling(window=2).mean()
print("\n使用 window=2 的 moving average 结果如下所示:")
print(result_mean)
```
上述例子展示了怎样利用 `rolling().mean()` 来求取每两个连续元素之间的平均数,并自动忽略了缺失的数据点。
### 扩展窗口 (Expanding)
对于那些希望从第一个观测值开始逐步增加纳入更多观察值的情况,则应考虑采用 Expanding 类型的操作。与 Rolling 不同的是,在这里每次迭代都会把之前所有的记录都囊括进来形成一个新的更大的样本空间去参与后续运算过程。
```python
# 使用 expanding 计算累积最大值
result_max = df.expanding(min_periods=1).max()
print("\n使用 expanding max 进行累计最大值计算结果如下所示:")
print(result_max)
```
这段脚本说明了当设置最小周期数目为 1 (`min_periods=1`) 时,随着索引的增长,所得到的最大值得到了不断更新和发展变化的趋势。
### 指数加权窗口 (EWM)
最后一种重要的窗口类型叫做 EWM(Exponential Weight Moving),其特点是赋予较近的时间点更高的权重而逐渐减弱远期的影响程度。这对于某些特定领域内的预测建模任务非常有用处,因为它反映了现实世界里很多现象随时间衰减的特点。
```python
# 使用 ewm 计算指数加权移动平均线
alpha_value = 0.5 # 衰减速率因子 alpha 取值范围通常介于(0,1)之间
result_ewma = df['B'].ewm(alpha=alpha_value, adjust=False).mean()
print(f"\n使用 alpha={alpha_value} 的 EWMA 结果如下所示:")
print(pd.DataFrame(result_ewma))
```
以上实例解释了如何设定不同的 α 参数来调整历史数据的重要性比例关系,进而影响最终输出序列形态特征。
阅读全文