如何在Polars中实现Pandas的30分钟重采样聚合逻辑?
Polars复刻Pandas重采样聚合的正确实现
目标Pandas代码
你想要复刻的Pandas重采样聚合逻辑如下:
AGG_DEFAULTS = { 'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last', 'volume': 'sum', 'transactions': 'sum', } df = df.resample('30min').agg(AGG_DEFAULTS).dropna()
原Polars代码的问题
你之前写的代码错误地使用了upsample + group_by的组合:upsample的作用是填充时间序列中的缺失时间点,而非按窗口聚合;后续的group_by("time")是按单个时间点分组,而非30分钟的时间窗口,因此只会取每个时间点的第一行值,无法实现窗口内的聚合。
正确的Polars实现
Polars原生支持resample方法,逻辑和Pandas完全对齐,直接用它就能实现需求:
import polars as pl AGG_DEFAULTS = { 'open': pl.first(), 'high': pl.max(), 'low': pl.min(), 'close': pl.last(), 'volume': pl.sum(), 'transactions': pl.sum(), } result = df.resample(time_column="time", every="30m").agg(AGG_DEFAULTS).drop_nulls()
关键说明
- 直接使用
resample指定时间列和采样频率,无需额外的upsample或group_by操作 - 聚合字典中直接使用Polars的聚合函数,键名对应原列名,无需手动设置别名
drop_nulls()对应Pandas的dropna(),用于移除无数据的采样窗口
内容的提问来源于stack exchange,提问作者T3metrics
相关产品推荐
相关产品推荐

