Polars-如何为UniqueID-Python排序日期和分配排名



Polars相对较新。我正在尝试按数据框中的UniqueID分组,并根据日期时间列进行排名,最早的日期排名为1等。

我在Pandas中看到了代码,但rank((还没有在Polars中作为表达式应用。关于如何做到这一点,有什么建议吗?

In [274]: df['rank'] = df.sort_values(['user','date']) 
.groupby(['user'])['date'] 
.rank(method='min').astype(int)

In [277]: df.sort_values(['user','date'])
Out[277]:
user       date  rank
1     1 2015-01-11     1
2     1 2015-01-11     1
3     1 2015-05-08     3
4     1 2015-07-08     4
0     1 2016-03-18     5
6     2 2015-02-10     1
7     2 2015-09-08     2
8     2 2016-01-01     3
9     2 2016-01-01     3
5     2 2016-03-17     5

排序日期并分配排名-python

提前感谢:(

所以polars已经实现了一个rank函数。因此,问题变得非常直接。:(

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    │
└──────┴────────────┴──────┘

最新更新