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