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

Python Polars窗口函数结合字面量实现分组累计计数问题

更优实现方法

直接用Polars内置的row_number()窗口函数,一步就能生成分组累计计数:

df.with_columns(pl.row_number().over("id").alias("count"))

这个方法不需要临时列,代码简洁高效,row_number()会自动在每个id分组内从1开始递增计数,完全匹配你的需求。

你的写法问题分析

你尝试的第二种写法报错,核心原因是:

  • pl.lit(1)是单个标量值(长度为1),当直接对它调用.cum_sum().over("id")时,窗口函数会尝试在每个分组内对这个标量做累计求和,但标量的长度和分组的实际行数不匹配(比如id=1的分组有3行,标量却只有1个值),因此触发了ComputeError。
  • 而第一种写法先通过.with_columns(pl.lit(1).alias("ones"))把标量广播成和DataFrame行数一致的列,此时ones列是每行都为1的完整列,再对它做分组累计求和就没问题——因为列的长度和每个分组的行数完全匹配。

如果不想用row_number(),也可以优化第一种写法,合并两个with_columns步骤:

df.with_columns(
    pl.lit(1).repeat(len(df)).cum_sum().over("id").alias("count")
)

但显然row_number()是最简洁的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:57:33