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

如何高效对Polars DataFrame的datetime[ns]时间戳做5分钟向下取整?

优化Polars时间戳5分钟向下取整的高效方案

你的问题核心是避免使用apply逐行处理,Polars提供了原生的矢量化datetime操作,效率比Python层面的自定义函数高几个数量级。

最优实现代码

直接使用Polars内置的dt.floor()方法(矢量化操作,底层Rust实现),无需依赖arrow库:

# 生成取整后的datetime类型列
df = df.with_columns(
    pl.col("timestamp").dt.floor("5m").alias("ts_floor")
)

# 若需转换为毫秒级时间戳整数(匹配你原函数的输出形式)
df = df.with_columns(
    pl.col("timestamp").dt.floor("5m").dt.epoch_ms().alias("ts_floor_ms")
)

# 若需纳秒级时间戳整数
df = df.with_columns(
    pl.col("timestamp").dt.floor("5m").dt.epoch_ns().alias("ts_floor_ns")
)

原方案低效的原因

你原来的apply方式是逐行调用Python函数,每个元素都要经历:

  1. Polars datetime对象转Python原生对象
  2. arrow库解析时间
  3. Python层面的数值计算
    这三步会带来巨大的性能开销,数据量越大,效率越低。

而Polars的dt.floor()是批量矢量化处理,直接在底层对整个列操作,完全跳过Python循环的开销,速度可提升10~100倍甚至更多。

逻辑正确性验证

对于示例值2023-03-08 11:13:07.831:

  • dt.floor("5m")会得到2023-03-08 11:10:00,完全符合5分钟向下取整的需求
  • 转换为毫秒级时间戳后为1678261800000,和你原函数的逻辑结果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:32:08