求助:为重复值生成唯一标识序列的技术实现方案
需求说明
输入数据集:
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
相关产品推荐
相关产品推荐

