トップ / ウィンドウ関数

percent_rank / cume_dist

パーティション内での相対的な順位を、0〜1の割合で表す。

SNOWPARK 静的検証のみ

percent_rank().over(window_spec)
cume_dist().over(window_spec)

POLARS 実行確認済み

((pl.col("v").rank(method="min") - 1) / (pl.col("v").count() - 1)).over("grp")  # percent_rank相当
(pl.col("v").rank(method="max") / pl.col("v").count()).over("grp")  # cume_dist相当

挙動・設計の違い

どちらもSnowparkでは専用のウィンドウ関数として1回の呼び出しで済むが、Polarsには同名の関数が無く、rank()から計算式で組み立てる必要がある。percent_rankは「(順位-1)÷(件数-1)」で先頭行が0・末尾行が1になる式、cume_distは「その値以下の行の割合」を表す式で、rank(method="max")(同順位の中で最大の順位)を使う点が異なる。4件のグループで実行して確認したところ、percent_rank[0, 0.33, 0.67, 1.0]cume_dist[0.25, 0.5, 0.75, 1.0]になり、定義どおりの値が出る。

移行時の落とし穴

percent_rankcume_distは名前も値も似ているため取り違えやすい。rank(method=...)の引数(minmaxか)を間違えると、どちらの計算式も静かに違う値を返す(エラーにはならない)。移植するときは、どちらの指標を再現したいのかを先に決めてから式を組み立てること。

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

出典・検証情報

Polars 1.36.1 で実行確認 / Snowpark Python SDK 1.51.1 で静的検証(2026-08-30)