You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Polars group_by_dynamic对时间序列下采样并保留空区间

Polars下采样保留空时间区间并前向填充

默认group_by_dynamic仅返回存在数据的时间区间,要生成完整的1秒间隔(含无数据空区间)并完成前向填充,可通过以下两种方式实现:

方法1:利用group_by_dynamic内置参数

通过include_empty=True强制生成所有符合间隔的时间区间,再补全空值:

# 按1秒分组,保留空区间,聚合取各列最后值
downsampled = taq_df.group_by_dynamic(
    "timestamp",
    every='1s',
    include_empty=True  # 关键参数:保留无数据的秒级区间
).agg(pl.exclude("bestex_timestamp").last())

# 前向填充空值
downsampled = downsampled.fill_null(strategy="forward")

方法2:手动生成完整时间轴左连接

若需自定义时间范围(比如扩展原数据的起止时间),可先构建完整的1秒序列,再和聚合结果关联:

# 获取原数据的时间边界
time_min = taq_df["timestamp"].min()
time_max = taq_df["timestamp"].max()

# 生成覆盖全范围的1秒间隔时间序列
full_time_axis = pl.DataFrame({
    "timestamp": pl.date_range(start=time_min, end=time_max, interval='1s')
})

# 原数据下采样聚合
aggregated_data = taq_df.group_by_dynamic(
    "timestamp",
    every='1s'
).agg(pl.exclude("bestex_timestamp").last())

# 左连接得到完整区间,执行前向填充
final_result = full_time_axis.join(aggregated_data, on="timestamp", how="left").fill_null(strategy="forward")

注:若原时间戳包含毫秒/微秒精度,group_by_dynamic会自动将时间截断至1秒间隔,无需额外处理。

内容的提问来源于stack exchange,提问作者Akhil Babu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:01:01