基于多维度排序为汽车租赁数据集生成两类租赁排名列
汽车租赁数据集排序与排名处理方案
原始数据集构造代码
import pandas as pd import numpy as np df = pd.DataFrame([['x','iii-2019-10-16','18/04/2019'], ['x','iii-2019-10-16','21/07/2019'], ['x','iii-2019-10-16','12/09/2019'], ['x','zzz-2020-10-25','12/04/2022'], ['y','qqq-2018-05-28','10/12/2017'], ['y','qqq-2018-05-28','15/02/2018'], ['y','ooo-2019-11-22','30/05/2019'], ['y','rrr-16-12-2020','16/12/2020'], ['z','ppt-2019-12-03','07/02/2018'], ['z','ttt-2019-12-03','28/05/2019'], ['z','ttt-2019-12-03','09/09/2019'], ['z','ttt-2019-12-03','30/09/2019'] ], columns=['Car_code','customer_rent_code','Rent_Date'])
需求实现步骤
1. 按指定字段排序
先把Rent_Date转成日期类型(避免字符串排序逻辑错误),再按Car_code、customer_rent_code、Rent_Date的顺序排序:
# 转换日期列格式 df['Rent_Date'] = pd.to_datetime(df['Rent_Date'], format='%d/%m/%Y') # 按指定字段排序并重置索引 df_sorted = df.sort_values(by=['Car_code', 'customer_rent_code', 'Rent_Date']).reset_index(drop=True)
2. 新增Rent_rank列(车辆-客户租赁批次排名)
该列表示同一车辆下,不同客户租赁代码的批次序号,同一客户租赁代码对应相同排名:
df_sorted['Rent_rank'] = df_sorted.groupby('Car_code')['customer_rent_code'].transform( lambda x: x.factorize()[0] + 1 )
- 逻辑:在每个车辆分组内,用
factorize()对客户租赁代码做编码,相同代码对应同一编码值,加1是让排名从1开始。
3. 新增Rent_rank_per_customer列(客户内租赁顺序排名)
该列表示同一客户租赁代码下,租赁记录的先后顺序排名:
df_sorted['Rent_rank_per_customer'] = df_sorted.groupby('customer_rent_code').cumcount() + 1
- 逻辑:
cumcount()会在每个客户分组内按排序后的顺序生成从0开始的计数,加1后得到从1开始的排名。
最终结果
执行上述代码后,df_sorted的输出如下:
| Car_code | customer_rent_code | Rent_Date | Rent_rank | Rent_rank_per_customer |
|---|---|---|---|---|
| x | iii-2019-10-16 | 2019-04-18 | 1 | 1 |
| x | iii-2019-10-16 | 2019-07-21 | 1 | 2 |
| x | iii-2019-10-16 | 2019-09-12 | 1 | 3 |
| x | zzz-2020-10-25 | 2022-04-12 | 2 | 1 |
| y | ooo-2019-11-22 | 2019-05-30 | 1 | 1 |
| y | qqq-2018-05-28 | 2017-12-10 | 2 | 1 |
| y | qqq-2018-05-28 | 2018-02-15 | 2 | 2 |
| y | rrr-16-12-2020 | 2020-12-16 | 3 | 1 |
| z | ppt-2019-12-03 | 2018-02-07 | 1 | 1 |
| z | ttt-2019-12-03 | 2019-05-28 | 2 | 1 |
| z | ttt-2019-12-03 | 2019-09-09 | 2 | 2 |
| z | ttt-2019-12-03 | 2019-09-30 | 2 | 3 |
内容的提问来源于stack exchange,提问作者Natali
相关产品推荐
相关产品推荐

