跳到主要内容

Pandas 窗口操作

在数据分析中,窗口操作是一种强大的工具,用于对时间序列或顺序数据进行局部计算。Pandas提供了多种窗口操作功能,包括滚动窗口、扩展窗口和指数加权窗口。这些操作可以帮助我们计算移动平均值、累积和、指数平滑等统计量。

什么是窗口操作?

窗口操作是指在数据上定义一个“窗口”,并在该窗口内进行计算。窗口可以是固定大小的(如滚动窗口),也可以是动态变化的(如扩展窗口)。通过窗口操作,我们可以对数据进行局部分析,而不是对整个数据集进行计算。

滚动窗口(Rolling Window)

滚动窗口是指在数据上定义一个固定大小的窗口,并在该窗口内进行计算。窗口会随着数据的移动而滚动,因此每次计算都是基于窗口内的数据。

示例:计算滚动平均值

假设我们有一个包含每日销售额的时间序列数据,我们希望计算过去7天的滚动平均值。

python
import pandas as pd

# 创建示例数据
data = {'date': pd.date_range(start='2023-01-01', periods=10, freq='D'),
'sales': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]}
df = pd.DataFrame(data)

# 计算7天滚动平均值
df['rolling_avg'] = df['sales'].rolling(window=7).mean()

print(df)

输出:

        date  sales  rolling_avg
0 2023-01-01 10 NaN
1 2023-01-02 20 NaN
2 2023-01-03 30 NaN
3 2023-01-04 40 NaN
4 2023-01-05 50 NaN
5 2023-01-06 60 NaN
6 2023-01-07 70 40.000000
7 2023-01-08 80 50.000000
8 2023-01-09 90 60.000000
9 2023-01-10 100 70.000000
备注

注意:在滚动窗口的前6行中,由于窗口大小不足7天,因此滚动平均值为NaN。

扩展窗口(Expanding Window)

扩展窗口是指在数据上定义一个从起始点到当前点的窗口,并在该窗口内进行计算。窗口会随着数据的增加而扩展,因此每次计算都是基于从起始点到当前点的所有数据。

示例:计算累积和

假设我们有一个包含每日销售额的时间序列数据,我们希望计算从起始点到当前点的累积和。

python
# 计算累积和
df['cumulative_sum'] = df['sales'].expanding().sum()

print(df)

输出:

        date  sales  cumulative_sum
0 2023-01-01 10 10.0
1 2023-01-02 20 30.0
2 2023-01-03 30 60.0
3 2023-01-04 40 100.0
4 2023-01-05 50 150.0
5 2023-01-06 60 210.0
6 2023-01-07 70 280.0
7 2023-01-08 80 360.0
8 2023-01-09 90 450.0
9 2023-01-10 100 550.0
提示

扩展窗口适用于需要计算累积统计量的场景,如累积和、累积平均值等。

指数加权窗口(Exponentially Weighted Window)

指数加权窗口是指在数据上定义一个窗口,并对窗口内的数据进行指数加权计算。指数加权窗口适用于需要对近期数据赋予更高权重的场景,如指数平滑。

示例:计算指数加权平均值

假设我们有一个包含每日销售额的时间序列数据,我们希望计算指数加权平均值。

python
# 计算指数加权平均值
df['ewm_avg'] = df['sales'].ewm(span=3, adjust=False).mean()

print(df)

输出:

        date  sales  ewm_avg
0 2023-01-01 10 10.0
1 2023-01-02 20 15.0
2 2023-01-03 30 22.5
3 2023-01-04 40 31.25
4 2023-01-05 50 40.625
5 2023-01-06 60 50.3125
6 2023-01-07 70 60.15625
7 2023-01-08 80 70.078125
8 2023-01-09 90 80.0390625
9 2023-01-10 100 90.01953125
警告

指数加权窗口的参数 span 决定了权重衰减的速度,span 越小,近期数据的权重越高。

实际应用场景

场景1:股票价格分析

在股票价格分析中,滚动窗口常用于计算移动平均线,帮助投资者识别趋势。扩展窗口可以用于计算累积收益率,而指数加权窗口可以用于平滑价格波动,识别短期趋势。

场景2:销售数据分析

在销售数据分析中,滚动窗口可以用于计算最近N天的平均销售额,扩展窗口可以用于计算累积销售额,而指数加权窗口可以用于平滑销售额波动,识别销售趋势。

总结

Pandas窗口操作是数据分析中非常强大的工具,适用于各种时间序列和顺序数据的局部计算。通过滚动窗口、扩展窗口和指数加权窗口,我们可以轻松计算移动平均值、累积和、指数平滑等统计量。掌握这些操作将大大提高你的数据分析能力。

附加资源与练习

  • 练习1:使用滚动窗口计算过去5天的销售额标准差。
  • 练习2:使用扩展窗口计算销售额的累积平均值。
  • 练习3:使用指数加权窗口计算销售额的指数加权标准差。
注意

在练习中,确保理解每个窗口操作的计算原理,并尝试调整参数观察结果的变化。