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的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 格式等价于 SQL 查询

MongoDB 等价于 SQL“NOT LIKE”查询

PySpark AND EXISTS 等价于 sql 查询

typeof 等价于 PL/SQL 中的对象类型

什么是 linq 等价于 SQL IN 运算符

Excel 等价于 T-SQL EXISTS