Python 相当于 SQL Rank

标签 python pandas dense-rank

我想在 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/

相关文章:

python - 如何计算 Pandas Dataframe 中所有列的哈希值?

hadoop - 在 hive 中使用 rank/dense_rank 查找每个部门中第二高的薪水

python - 如何覆盖 django admin 的默认文件上传行为?

python - 我可以解析不同格式的日期吗?

python - 如何查找数据框列中元素的编号

sql - 向密集秩函数添加条件子句(Where)

sql - DENSE_RANK() 无重复

python - 如何在python中的sklearn中打印tf-idf分数矩阵

python - 带有分类的 Pandas DataFrame 无法进行比较

javascript - 如何在ajax调用中使用flask url_for?