如何创建仅按Family列排名的Nr新ID列?附期望输出示例
按Family列生成唯一排名列(Nr)的方法
根据你的需求,要给每个不同的Family分配唯一的连续编号,相同Family对应的Nr保持一致,以下是几种常用工具的实现方法:
Excel 实现步骤
- 提取唯一Family列表:在空白列(比如E列)输入公式
=UNIQUE(C:C),回车后会得到所有不重复的Family值(John、Ruth、Andrea)。 - 给唯一列表编号:在F2输入
1,F3输入2,F4输入3,完成基础编号。 - 匹配编号到原表:在D2单元格输入公式
=VLOOKUP(C2, $E$2:$F$4, 2, FALSE),下拉填充整列,即可得到目标Nr列。
Python pandas 实现
使用factorize()函数可以快速将类别型数据映射为连续整数,正好符合需求:
import pandas as pd # 假设你的数据存储在DataFrame df中 df['Nr'] = df['Family'].factorize()[0] + 1 # +1让编号从1开始(默认从0起始)
执行后,相同Family会被分配相同的Nr,编号顺序对应Family首次出现的顺序。
SQL 实现
按Family字母顺序排名
如果希望按Family的字母顺序生成编号,使用DENSE_RANK()窗口函数:
SELECT Date, Letter, Family, DENSE_RANK() OVER (ORDER BY Family) AS Nr FROM your_table;
按Family首次出现顺序排名
如果要和示例一致,按Family在表中首次出现的顺序编号(John→1,Ruth→2,Andrea→3),可以用子查询先给唯一Family编号,再关联原表:
WITH ranked_families AS ( SELECT DISTINCT Family, ROW_NUMBER() OVER (ORDER BY MIN(Date), MIN(Letter)) AS Nr FROM your_table GROUP BY Family ) SELECT t.Date, t.Letter, t.Family, rf.Nr FROM your_table t JOIN ranked_families rf ON t.Family = rf.Family;
内容的提问来源于stack exchange,提问作者rafamaniac
相关产品推荐
相关产品推荐

