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

在Rust中使用Polars重采样5分钟至15分钟时间序列遇阻求助

Rust Polars 5分钟转15分钟时间序列重采样生成OHLC解决方案

依赖配置

确保Cargo.toml中包含Polars的必要特性:

[dependencies]
polars = { version = "0.35.4", features = ["lazy", "csv", "dynamic_groupby"] }
chrono = "0.4.31"

完整实现代码

use polars::prelude::*;
use chrono::NaiveDateTime;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 读取CSV数据(适配你的数据格式,确保包含datetime、open、high、low、close列)
    let raw_df = CsvReader::from_path("your_data.csv")?
        .infer_schema(Some(100))
        .has_header(true)
        .finish()?;

    // 将字符串格式的datetime转换为Polars可识别的时间类型
    let parsed_df = raw_df.with_column(
        col("datetime")
            .str()
            .strptime(StrpTimeOptions::new("%Y-%m-%d %H:%M:%S"), false)
            .alias("datetime")
    )?;

    // 15分钟窗口重采样并生成OHLC
    let ohlc_df = parsed_df
        .lazy()
        // 基于datetime列做15分钟动态分组
        .groupby_dynamic([col("datetime")], [Duration::parse("15m")])
        // 定义OHLC各列的聚合规则
        .agg([
            col("open").first().alias("open"),
            col("high").max().alias("high"),
            col("low").min().alias("low"),
            col("close").last().alias("close"),
            // 若有其他列(如volume),可追加聚合规则,例如col("volume").sum().alias("volume")
        ])
        // 按时间排序保证序列正确
        .sort("datetime", Default::default())
        .collect()?;

    // 打印结果或保存到文件
    println!("{}", ohlc_df);
    ohlc_df.write_csv("resampled_ohlc.csv")?;

    Ok(())
}

问题原因与修正说明

  1. 仅时间分组无列聚合:
    你之前的代码缺少agg步骤,groupby_dynamic仅完成分组逻辑,必须通过agg明确指定每列的聚合规则(如首值、最大值等),才能生成目标OHLC数据。

  2. 添加by参数后重采样失效:
    groupby_dynamic的by参数用于指定额外的分组维度(比如多交易标的场景下的symbol列),如果错误将非分组维度的列加入by,会导致每个分组仅包含单条原始数据,重采样逻辑直接失效。
    若你的数据包含多维度(如不同交易对),正确写法如下:

    .groupby_dynamic([col("datetime")], [Duration::parse("15m")])
    .by([col("symbol")])
    .agg([...])
    

数据格式注意事项

  • 确保CSV中的datetime列格式与代码中的解析规则(%Y-%m-%d %H:%M:%S)匹配,若为带时区的时间,需调整为chrono::DateTime<Utc>并修改解析逻辑。
  • 确认open/high/low/close列是数值类型(Polars会自动推断,若异常可手动指定schema)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:30:45