import polars as pl
from datetime import date
df = pl.DataFrame(
{
"user": [1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
"date": [
date(2015, 1, 11),
date(2015, 1, 11),
date(2015, 5, 8),
date(2015, 7, 8),
date(2016, 3, 18),
date(2015, 2, 10),
date(2015, 9, 8),
date(2016, 1, 1),
date(2016, 1, 1),
date(2016, 3, 17),
],
}
)
df = df.with_column(pl.col("date").
rank(method="min").
over(["user"]).alias("rank"))
>>> df
shape: (10, 3)
┌──────┬────────────┬──────┐
│ user ┆ date ┆ rank │
│ --- ┆ --- ┆ --- │
│ i64 ┆ date ┆ u32 │
╞══════╪════════════╪══════╡
│ 1 ┆ 2015-01-11 ┆ 1 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 1 ┆ 2015-01-11 ┆ 1 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 1 ┆ 2015-05-08 ┆ 3 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 1 ┆ 2015-07-08 ┆ 4 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ ... ┆ ... ┆ ... │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 2 ┆ 2015-09-08 ┆ 2 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 2 ┆ 2016-01-01 ┆ 3 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 2 ┆ 2016-01-01 ┆ 3 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ 2 ┆ 2016-03-17 ┆ 5 │
└──────┴────────────┴──────┘