Pandas 滑动窗口函数
最后修改时间:2025年3月1日
Pandas 是一个强大的 Python 数据处理库。滑动窗口函数用于在滑动或扩展的窗口内分析数据。本教程将通过实际示例介绍如何在 Pandas 中使用滑动窗口函数。
滑动窗口函数对于时间序列分析、移动平均和累积计算非常有用。Pandas 提供了 rolling()
和 expanding()
等方法来完成这些任务。
滑动窗口:移动平均
此示例演示如何使用滑动窗口计算移动平均。
import pandas as pd data = { 'Date': pd.date_range(start='2023-01-01', periods=10, freq='D'), 'Values': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] } df = pd.DataFrame(data) df['MovingAvg'] = df['Values'].rolling(window=3).mean() print(df)
rolling(window=3).mean()
计算 'Values' 列的 3 天移动平均。这对于平滑时间序列数据很有用。
滑动窗口:最小值和最大值
此示例演示了计算滑动最小值和最大值。
import pandas as pd data = { 'Date': pd.date_range(start='2023-01-01', periods=10, freq='D'), 'Values': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] } df = pd.DataFrame(data) df['RollingMin'] = df['Values'].rolling(window=3).min() df['RollingMax'] = df['Values'].rolling(window=3).max() print(df)
rolling(window=3).min()
和 rolling(window=3).max()
分别计算滑动最小值和最大值。这对于识别趋势很有用。
扩展窗口:累积总和
此示例演示如何使用扩展窗口计算累积总和。
import pandas as pd data = { 'Date': pd.date_range(start='2023-01-01', periods=10, freq='D'), 'Values': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] } df = pd.DataFrame(data) df['CumulativeSum'] = df['Values'].expanding().sum() print(df)
expanding().sum()
计算 'Values' 列的累积总和。这对于跟踪累积总数很有用。
扩展窗口:累积平均
此示例演示如何使用扩展窗口计算累积平均。
import pandas as pd data = { 'Date': pd.date_range(start='2023-01-01', periods=10, freq='D'), 'Values': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] } df = pd.DataFrame(data) df['CumulativeAvg'] = df['Values'].expanding().mean() print(df)
expanding().mean()
计算 'Values' 列的累积平均。这对于分析随时间变化的趋势很有用。
滑动窗口自定义函数
此示例演示如何将自定义函数应用于滑动窗口。
import pandas as pd data = { 'Date': pd.date_range(start='2023-01-01', periods=10, freq='D'), 'Values': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] } df = pd.DataFrame(data) def custom_agg(x): return x.max() - x.min() df['RollingRange'] = df['Values'].rolling(window=3).apply(custom_agg) print(df)
rolling(window=3).apply(custom_agg)
应用自定义函数来计算每个滑动窗口内的范围(最大值 - 最小值)。这对于自定义计算很有用。
滑动窗口居中对齐
此示例演示了使用居中对齐的滑动窗口。
import pandas as pd data = { 'Date': pd.date_range(start='2023-01-01', periods=10, freq='D'), 'Values': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] } df = pd.DataFrame(data) df['RollingAvgCenter'] = df['Values'].rolling(window=3, center=True).mean() print(df)
rolling(window=3, center=True).mean()
计算以每个点为中心的滑动平均。这对于对称分析很有用。
滑动窗口最小周期数
此示例演示了如何使用带有最小周期数的滑动窗口。
import pandas as pd data = { 'Date': pd.date_range(start='2023-01-01', periods=10, freq='D'), 'Values': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] } df = pd.DataFrame(data) df['RollingAvgMinPeriods'] = df['Values'].rolling(window=3, min_periods=1).mean() print(df)
rolling(window=3, min_periods=1).mean()
即使可用值少于 3 个,也会计算滑动平均。这对于处理边缘情况很有用。
滑动窗口函数最佳实践
- 理解数据: 在应用滑动窗口函数之前,请分析数据结构。
- 选择合适的窗口大小: 选择与您的分析目标一致的窗口大小。
- 处理边缘情况: 使用
min_periods
处理不完整的窗口。 - 验证结果: 检查窗口化数据以确保准确性和一致性。
来源
在本文中,我们探讨了如何在 Pandas 中使用滑动窗口函数。
作者
所有 Pandas 教程列表。