You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建仅按Family列排名的Nr新ID列?附期望输出示例

按Family列生成唯一排名列(Nr)的方法

根据你的需求,要给每个不同的Family分配唯一的连续编号,相同Family对应的Nr保持一致,以下是几种常用工具的实现方法:

Excel 实现步骤

  1. 提取唯一Family列表:在空白列(比如E列)输入公式 =UNIQUE(C:C),回车后会得到所有不重复的Family值(John、Ruth、Andrea)。
  2. 给唯一列表编号:在F2输入1,F3输入2,F4输入3,完成基础编号。
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:25:21