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

如何使用Pandas为多列分配唯一的9位数字标识符

解决方案

规则说明

region_1_code 生成逻辑

  • 将country_code格式化为3位数字字符串(不足3位前补0,例如88→"880")
  • 提取所有唯一的region_1值,按字母顺序排序后从1开始分配整数编码,将编码转换为6位格式(例如1→"100000")
  • 拼接3位国家编码与6位region_1编码,得到9位的region_1_code

region_2_code 生成逻辑

  • 同样将country_code格式化为3位数字字符串
  • 提取所有唯一的region_1值,按字母顺序排序后从1开始分配整数编码,转换为3位格式(例如1→"100")
  • 在每个region_1分组内,提取唯一的region_2值,按字母顺序排序后从1开始分配整数编码,转换为3位格式(例如1→"100")
  • 拼接3位国家编码、3位region_1编码、3位region_2编码,得到9位的region_2_code

代码实现

import pandas as pd

# 模拟输入DataFrame(对应你提供的表格内容)
df = pd.DataFrame({
    "country_code": [88, 88, 88, 88],
    "region_1": ["B", "B", "C", "C"],
    "region_2": ["D", "E", "D", "F"]
})

# 处理country_code为3位字符串
df["country_3"] = df["country_code"].astype(str).str.zfill(3)

# 生成region_1的6位编码映射,用于region_1_code
sorted_r1 = sorted(df["region_1"].unique())
r1_6digit_map = {r: str((i+1)*100000) for i, r in enumerate(sorted_r1)}
df["region_1_code"] = df["country_3"] + df["region_1"].map(r1_6digit_map)

# 生成region_1的3位编码映射,用于region_2_code
r1_3digit_map = {r: str((i+1)*100) for i, r in enumerate(sorted_r1)}
df["r1_3code"] = df["region_1"].map(r1_3digit_map)

# 按region_1分组,生成每组内region_2的3位编码
def assign_r2_code(group):
    sorted_r2 = sorted(group["region_2"].unique())
    r2_3digit_map = {r: str((i+1)*100) for i, r in enumerate(sorted_r2)}
    group["r2_3code"] = group["region_2"].map(r2_3digit_map)
    return group

df = df.groupby("region_1").apply(assign_r2_code).reset_index(drop=True)

# 拼接生成region_2_code
df["region_2_code"] = df["country_3"] + df["r1_3code"] + df["r2_3code"]

# 清理辅助列
df = df.drop(["country_3", "r1_3code", "r2_3code"], axis=1)

print(df)

运行结果

执行代码后得到的DataFrame与你要求的一致:

country_coderegion_1region_2region_1_coderegion_2_code
88BD880100000880100100
88BE880100000880100200
88CD880200000880200100
88CF880200000880200200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:48:35