トップ / ウィンドウ関数

row_number

パーティション内で1から始まる連番をふります。同率でも必ず別の番号になります。

SNOWPARK 静的検証のみ

row_number().over(window_spec)

POLARS 実行確認済み

# 先にソートしてから使う
ldf.sort(["department", "salary"]).with_columns(pl.col("salary").cum_count().over("department").alias("rn"))

挙動・設計の違い

SnowparkはSQLのROW_NUMBER()に変換されます。Polarsには専用の連番関数がなく、.cum_count()(累積個数)をパーティションごとに数える形で代用します。実行して確認したところ、同率の値(rankでは同じ順位になった行)でも、cum_countでは別々の連番になります。

移行時の落とし穴

Polarsのcum_count()は、あらかじめデータが正しい順序に並んでいることが前提です(累積で数えるだけなので、並べ替えの機能自体は持ちません)。パーティション内でどの順に番号をふりたいかに応じて、.over()を付ける前にsort()しておく必要があります。ソートを忘れると、意図した順序と違う連番になります。

ウィンドウ関数の他のメソッド

出典・検証情報

Polars 1.43.2 で実行確認 / Snowpark Python SDK 1.54.0 で静的検証(2026-08-24)