基于cat1、cat2两个类别对id进行自定义排序的技术咨询
多维度自定义优先级排名实现方案
你需要的是按自定义优先级的两个维度排序后生成连续排名,以下是不同场景下的实现方法:
SQL 实现
通过CASE语句给cat1映射自定义排序权重,再配合窗口函数生成排名:
SELECT id, cat1, cat2, ROW_NUMBER() OVER ( ORDER BY CASE cat1 WHEN 'death' THEN 1 WHEN 'pd' THEN 2 WHEN 'pr' THEN 3 END ASC, cat2 ASC ) AS `rank` FROM 你的业务表名;
Python Pandas 实现
通过指定分类变量的顺序定义cat1的优先级,排序后生成排名:
import pandas as pd # 替换为你的实际数据表 df = pd.read_csv("你的数据文件路径.csv") # 定义cat1的优先级顺序 df['cat1'] = pd.Categorical(df['cat1'], categories=['death', 'pd', 'pr'], ordered=True) # 按两个维度升序排序后生成排名 df = df.sort_values(by=['cat1', 'cat2'], ascending=[True, True]) df['rank'] = range(1, len(df) + 1)
Excel 实现
通过辅助列映射权重后计算排名:
- 新增辅助列D(假设cat1在B列、cat2在C列,数据从第2行开始),D2单元格输入公式:
=IF(B2="death",1,IF(B2="pd",2,3)),下拉填充所有行 - 排名列E2输入公式:
=SUMPRODUCT(--(D2*10+C2>D$2:D$100*10+C$2:C$100))+1,下拉填充即可,公式中的范围D$2:D$100可根据实际数据行数调整
内容的提问来源于stack exchange,提问作者Sophia
相关产品推荐
相关产品推荐

