Python 等价于 SQL Rank
Posted
技术标签:
【中文标题】Python 等价于 SQL Rank【英文标题】:Python Equivalent to SQL Rank 【发布时间】:2021-09-06 00:54:31 【问题描述】:我想在 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;
【问题讨论】:
【参考方案1】: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)
【讨论】:
这是错误:“pandas.core.base.DataError: No numeric types to aggregate” @Prudhavi - 你能在我的解决方案之前添加df['date'] = pd.to_datetime(df['date'])
吗?
工作就像一个魅力。谢谢你。而且我不知道我们可以使用 pd.to_dateframe 将整个列更改为最新。有用的提示。以上是关于Python 等价于 SQL Rank的主要内容,如果未能解决你的问题,请参考以下文章