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

求助:为重复值生成唯一标识序列的技术实现方案

需求说明

输入数据集:

Name region
abc india
def austrila
ghi india
jkl austrila

需新增glr_code列,规则为按region分组后生成三位补零的递增序号,再与region名称拼接,输出示例:

Name region glr_code
abc india 001india
def austrila 001austrila
ghi india 002india
jkl austrila 002austrila

方案1:Python Pandas 实现

核心逻辑:按region分组,给每组内的行分配递增序号,再通过字符串补零后拼接region。

import pandas as pd

# 读取输入数据(假设数据存为input.csv)
df = pd.read_csv('input.csv', delim_whitespace=True)
# 按region分组生成组内序号(从1开始)
df['glr_code'] = df.groupby('region').cumcount() + 1
# 格式化为三位补零字符串,再拼接region
df['glr_code'] = df['glr_code'].astype(str).str.zfill(3) + df['region']
# 打印输出结果
print(df.to_string(index=False))

方案2:SQL 实现(以MySQL为例)

核心逻辑:用窗口函数ROW_NUMBER()按region分区排序,再通过LPAD()补零后拼接region。

SELECT 
    Name,
    region,
    CONCAT(LPAD(ROW_NUMBER() OVER (PARTITION BY region ORDER BY Name), 3, '0'), region) AS glr_code
FROM your_table_name;

注:其他SQL方言(如PostgreSQL)语法基本通用,仅需确保窗口函数和字符串补零函数的用法匹配对应方言。

方案3:Shell Awk 实现

核心逻辑:用数组记录每个region的计数,每遇到一条数据就递增对应region的计数,格式化后拼接输出。
创建脚本文件generate_glr.awk:

BEGIN {
    print "Name region glr_code"
    FS=" "  # 设置字段分隔符为空格
}
NR>1 {  # 跳过表头行
    count[$2]++
    printf "%s %s %03d%s\n", $1, $2, count[$2], $2
}

执行命令:

awk -f generate_glr.awk input.txt

内容的提问来源于stack exchange,提问作者sravan kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:04:54