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 教程列表。