トップ / ウィンドウ関数
パーティション内での相対的な順位を、0〜1の割合で表す。
percent_rank().over(window_spec)
cume_dist().over(window_spec)
((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_rankとcume_distは名前も値も似ているため取り違えやすい。rank(method=...)の引数(minかmaxか)を間違えると、どちらの計算式も静かに違う値を返す(エラーにはならない)。移植するときは、どちらの指標を再現したいのかを先に決めてから式を組み立てること。
Polars 1.36.1 で実行確認 / Snowpark Python SDK 1.51.1 で静的検証(2026-08-30)