如何在Polars中动态创建字段?新增多列lag偏移列的最优方法是什么
Polars 动态创建偏移列最优方案
Polars 中动态生成多列的最优实现是批量构造表达式一次性提交,避免多次调用with_columns产生额外的性能开销,Polars 会自动并行执行所有传入的列生成逻辑,性能远高于逐列添加。
针对你需要生成12个lag偏移列的场景,示例实现如下:
import polars as pl # 示例测试数据 df = pl.DataFrame({ "seq": range(30), "metric": range(30) }) # 动态生成lag1到lag12列 lag_count = 12 df_result = df.with_columns( [pl.col("metric").shift(lag_step).alias(f"lag{lag_step}") for lag_step in range(1, lag_count + 1)] )
扩展场景适配
- 多列同时生成偏移列:如果需要对多个字段生成偏移,只需扩展列表推导逻辑即可
# 对metric、revenue两列各生成12个偏移列 target_cols = ["metric", "revenue"] df_multi_lag = df.with_columns( [pl.col(col).shift(step).alias(f"{col}_lag{step}") for col in target_cols for step in range(1, 13)] )
- 分组偏移:如果需要按分组维度做偏移,追加
over方法即可
# 按group_id分组生成偏移列 df_group_lag = df.with_columns( [pl.col("metric").shift(step).over("group_id").alias(f"lag{step}") for step in range(1, 13)] )
内容的提问来源于stack exchange,提问作者hakan.t
相关产品推荐
相关产品推荐

