如何利用Polars偏移列对日期列执行时间偏移计算?
解决方案
方法一:使用dt.add结合动态构造的Duration
Polars的dt.offset_by仅支持固定字符串偏移,无法接收列作为参数。要实现按行动态添加小时和分钟偏移,最佳方式是用dt.add方法,配合pl.duration动态生成每行对应的时长增量:
df = pl.DataFrame( { "date": ["2022-01-01", "2022-01-02"], "hroff": [5, 2], "minoff": [1, 2] } ).with_columns(pl.col('date').str.to_date()) # 生成带偏移的newdate列 result = df.with_columns( pl.col("date") .cast(pl.Datetime) .dt.convert_time_zone("UTC") .dt.add(pl.duration(hours=pl.col("hroff"), minutes=pl.col("minoff"))) .alias("newdate") ) print(result)
方法二:通过算术运算直接累加总分钟数
也可以将小时和分钟转换成总分钟数,直接与datetime列进行算术运算(Polars支持datetime与整数分钟的加法):
result = df.with_columns( (pl.col("date").cast(pl.Datetime).dt.convert_time_zone("UTC") + pl.col("hroff") * 60 + pl.col("minoff")).alias("newdate") )
说明
两种方法都能实现动态偏移需求,其中方法一更直观,符合时间操作的语义;方法二则更简洁,适合快速计算。
内容的提问来源于stack exchange,提问作者Dean MacGregor
相关产品推荐
相关产品推荐

