ZetCode

Pandas 滑动窗口函数

最后修改时间:2025年3月1日

Pandas 是一个强大的 Python 数据处理库。滑动窗口函数用于在滑动或扩展的窗口内分析数据。本教程将通过实际示例介绍如何在 Pandas 中使用滑动窗口函数。

滑动窗口函数对于时间序列分析、移动平均和累积计算非常有用。Pandas 提供了 rolling()expanding() 等方法来完成这些任务。

滑动窗口:移动平均

此示例演示如何使用滑动窗口计算移动平均。

rolling_window.py
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 天移动平均。这对于平滑时间序列数据很有用。

滑动窗口:最小值和最大值

此示例演示了计算滑动最小值和最大值。

rolling_min_max.py
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() 分别计算滑动最小值和最大值。这对于识别趋势很有用。

扩展窗口:累积总和

此示例演示如何使用扩展窗口计算累积总和。

expanding_sum.py
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' 列的累积总和。这对于跟踪累积总数很有用。

扩展窗口:累积平均

此示例演示如何使用扩展窗口计算累积平均。

expanding_avg.py
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' 列的累积平均。这对于分析随时间变化的趋势很有用。

滑动窗口自定义函数

此示例演示如何将自定义函数应用于滑动窗口。

rolling_custom.py
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) 应用自定义函数来计算每个滑动窗口内的范围(最大值 - 最小值)。这对于自定义计算很有用。

滑动窗口居中对齐

此示例演示了使用居中对齐的滑动窗口。

rolling_center.py
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() 计算以每个点为中心的滑动平均。这对于对称分析很有用。

滑动窗口最小周期数

此示例演示了如何使用带有最小周期数的滑动窗口。

rolling_min_periods.py
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 个,也会计算滑动平均。这对于处理边缘情况很有用。

滑动窗口函数最佳实践

来源

Pandas rolling 文档

在本文中,我们探讨了如何在 Pandas 中使用滑动窗口函数。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

所有 Pandas 教程列表。