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
相关产品推荐
相关产品推荐

