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

Polars中horizontal cumulative sum结合unnest出现literal列残留Bug

Polars v1.31.0中横向累积求和+unnest操作的"literal"列Bug分析

这是Polars的Bug,并非操作不当导致。

问题原因

pl.cum_sum_horizontal()的内部处理逻辑存在错误:

  • 执行该函数并对结果unnest后,Schema中会错误地生成一个不存在的literal列;
  • 即使显式调用drop("literal")移除该列,LazyFrame的执行计划中仍残留对literal列的引用,最终collect时触发ColumnNotFoundError。

从复现输出能明显看到:

  • unnest+rename后的Schema包含literal列,但实际数据中无此列;
  • 删除literal后Schema显示已移除,但执行collect仍报错,说明逻辑计划未正确清除依赖。

临时解决方案

方案1:先转为DataFrame再处理

通过提前collect打断LazyFrame链式操作,避免逻辑计划残留错误依赖:

result = (
    lazy_df.select(pl.cum_sum_horizontal(time_cols))
    .collect()  # 先转换为DataFrame
    .unnest("cum_sum")
    .rename({col: f"C{col}" for col in time_cols})
    .lazy()  # 按需转回LazyFrame
)

方案2:直接生成命名的累积列

跳过unnest步骤,手动构造每个累积求和列并命名:

result = lazy_df.select(
    [pl.cum_sum_horizontal(time_cols[:i+1]).alias(f"C{time_cols[i]}") for i in range(len(time_cols))]
)

内容的提问来源于stack exchange,提问作者Nicolò Cavalleri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 13:43:13