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