我想在 python pandas 模块中拥有等效的 SQL 等级。我想过滤掉所有排名 = 1 的日期
我有以下数据框:
id date
12 2021-06-01
12 2021-06-15
12 2021-06-21
34 2021-06-05
87 2021-06-19
53 2021-06-05
我需要通过以下方式应用排名:
id date rank
12 2021-06-01 1
12 2021-06-15 2
12 2021-06-21 3
34 2021-06-05 1
87 2021-06-19 1
53 2021-06-05 1
执行此操作的 SQL 是
select id, date, rank() over (partition by id order by date asc) as rank
from table;
最佳答案
IIUC使用GroupBy.rank
:
df['date'] = pd.to_datetime(df['date'])
df['rank'] = df.groupby('id')['date'].rank(method='dense').astype(int)
print (df)
id date rank
0 12 2021-06-01 1
1 12 2021-06-15 2
2 12 2021-06-21 3
3 34 2021-06-05 1
4 87 2021-06-19 1
5 53 2021-06-05 1
如果日期时间按组排序是可能的 GroupBy.cumcount
:
df = df.sort_values(['id','date'])
df['rank'] = df.groupby('id')['date'].cumcount().add(1)
关于Python 相当于 SQL Rank,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68083385/