Pandas series.expanding() 方法如何工作?

2025年1月5日 | 阅读 4 分钟

引言

Pandas 是 Python 中用于数据操作和分析的强大库。在其众多函数中,expanding() 方法在滚动或扩展窗口中分析数据特别有用。在本文中,我们将深入探讨 Series.expanding() 方法的工作原理、其参数以及实际用法示例。

理解 Series.expanding() 方法

Series.expanding() 方法返回数据的扩展窗口,这意味着它包含从序列开始到当前索引的所有值。它计算并返回应用于此扩展窗口内数据的指定聚合函数。

语法

Series.expanding() 方法的语法如下:

  • min_periods: 指定窗口中需要有值的最小观测值数量。默认为 1。
  • center: 如果为 True,则窗口的中心值用作窗口的标签。默认为 False。
  • axis: 指定应用扩展窗口的轴。默认为 0(沿行)。

参数

  • min_periods: 此参数允许您为每个窗口设置一个有效结果所需的最小观测值数量。例如,如果 min_periods=3,则前两个观测值少于三个的窗口将返回 NaN。
  • center: 设置 center=True 意味着窗口的标签是窗口的中心值。这在处理时间序列数据时可能很有用,您希望标签代表窗口的中点。
  • axis: 指定是沿行的轴 (axis=0) 还是沿列的轴 (axis=1) 应用扩展窗口。

返回值

Series.expanding() 方法返回一个 Expanding 对象,可用于将聚合函数应用于扩展窗口的数据。

实际示例

让我们通过一些实际示例来了解 Series.expanding() 方法在不同场景下的工作原理。

示例 1:计算累积和

输出

0     1.0
1     3.0
2     6.0
3    10.0
4    15.0
dtype: float64

在此示例中,为序列中的每个值计算扩展和。第一个值与原始值相同,后续每个值都是到该点为止的所有值的总和。

示例 2:计算扩展平均值

输出

0    1.000000
1    1.500000
2    2.000000
3    2.500000
4    3.000000
dtype: float64

在此,为序列中的每个值计算扩展平均值。第一个值与原始值相同,后续每个值都是到该点为止的所有值的平均值。

示例 3:使用自定义聚合函数

输出

0    0.0
1    1.0
2    2.0
3    3.0
4    4.0
dtype: float64

在此示例中,定义了一个自定义聚合函数来计算扩展窗口中最大值和最小值之间的差值。

优化

在处理大型数据集时,优化代码性能至关重要。优化 Series.expanding() 方法的一种方法是使用 numpy 库对底层数据数组执行计算,这可能比直接使用 Pandas 更快。

示例:优化计算速度

输出

0          5
1          5
2          5
3          5
4          5
          ..
999995    99
999996    99
999997    99
999998    99
999999    99
Length: 1000000, dtype: int64

结论

Pandas 中的 Series.expanding() 方法是计算数据扩展窗口聚合的强大工具。通过指定 min_periods 和 center 等参数,您可以自定义扩展窗口的行为以满足您的需求。无论您是分析时间序列数据还是执行复杂的聚合,expanding() 方法都可以帮助您从数据中获得宝贵的见解。