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

Polars中是否有row_number或row_count表达式?需窗口函数排序

Polars中实现ROW_NUMBER()/RANK()窗口函数的方法

Polars完全支持类似SQL中ROW_NUMBER()、RANK()的表达式,可直接作为窗口函数配合over()使用,无需依赖DataFrame级别的方法,完美匹配你按客户单日订单排序的需求。

核心用法示例

假设你的数据结构包含ID Client、订单日期、订单编号字段,以下是具体实现方式:

1. 生成连续行号(对应SQL的ROW_NUMBER())

给每个客户单日的订单按编号生成从1开始的连续序号,即使订单编号重复,序号也不会重复:

import polars as pl

df = df.with_columns(
    pl.row_number().over(
        partition_by=["ID Client", "订单日期"],
        order_by="订单编号"
    ).alias("订单排序号")
)

2. 生成带跳跃的排名(对应SQL的RANK())

相同订单编号会获得相同排名,下一个不同值的排名会跳过中间序号:

df = df.with_columns(
    pl.rank().over(
        partition_by=["ID Client", "订单日期"],
        order_by="订单编号"
    ).alias("订单排名")
)

3. 生成无跳跃的密集排名(对应SQL的DENSE_RANK())

相同订单编号获得相同排名,下一个不同值的排名直接递增,无跳跃:

df = df.with_columns(
    pl.rank(method="dense").over(
        partition_by=["ID Client", "订单日期"],
        order_by="订单编号"
    ).alias("订单密集排名")
)

补充说明

这些都是纯Polars表达式,可在select()、filter()等任意支持表达式的场景中使用,逻辑完全对齐SQL窗口函数的行为,比with_row_index更灵活,能精准实现分组排序后的序号/排名需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:42:34