Python 相当于 SQL 排名
Python Equivalent to SQL 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 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)