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

如何为Pandas DataFrame指定列替换为独立/共享的递增唯一字符串?

Pandas DataFrame分组唯一值替换实现方案

核心思路

  • 对itm列单独生成A开头的递增唯一字符串,同一原始值对应固定编码,不同值按规则递增
  • 合并cla1和cla2的所有唯一值,生成X开头的共享递增唯一字符串,通过不同前缀天然避免与itm列编码重复

具体代码实现

假设你的原始DataFrame名为df,直接运行以下代码即可完成替换:

import pandas as pd

# ---------------------- 处理itm列 ----------------------
# 提取itm的唯一值,按首次出现顺序生成递增整数编码
itm_unique, itm_codes = pd.factorize(df['itm'])
# 动态计算补零位数,保证编码格式统一(比如100个唯一值则补两位零)
zero_pad_length = len(str(max(itm_codes)))
# 将整数编码映射为A开头的字符串
df['itm'] = [f"A{code:0{zero_pad_length}}" for code in itm_codes]

# ---------------------- 处理cla1和cla2列 ----------------------
# 合并两列所有值,获取全局唯一值集合
cla_combined_values = pd.concat([df['cla1'], df['cla2']]).unique()
# 生成X开头的共享映射规则
cla_unique, cla_values = pd.factorize(cla_combined_values)
cla_zero_pad = len(str(max(cla_unique)))
cla_mapping = {val: f"X{code:0{cla_zero_pad}}" for code, val in zip(cla_unique, cla_values)}
# 替换cla1和cla2列的原始值
df['cla1'] = df['cla1'].map(cla_mapping)
df['cla2'] = df['cla2'].map(cla_mapping)

关键细节说明

  1. 编码逻辑:pd.factorize()会给每个唯一值分配从0开始的递增整数,确保同一原始值对应同一编码,完全满足"分组替换为递增唯一字符串"的需求
  2. 格式统一:通过zero_pad_length动态计算补零位数,让所有编码长度一致,比如120个唯一值会生成A00到A119的格式
  3. 避免重复:itm用A前缀,cla1/cla2用X前缀,两组编码天然不重复,无需额外去重判断
  4. 可选调整:如果需要按原始值的大小排序生成编码(而非首次出现顺序),可以把factorize替换为排序后的枚举,比如处理itm的代码改为:
itm_sorted_unique = sorted(df['itm'].unique())
itm_mapping = {val: f"A{i:0{len(str(len(itm_sorted_unique)-1))}}" for i, val in enumerate(itm_sorted_unique)}
df['itm'] = df['itm'].map(itm_mapping)

效果验证

运行后你的DataFrame会和示例输出一致:

itm cla1 cla2 num
0   A0   X0  X98  0.7
1   A1   X1   X9  0.9
2   A2   X2   X0    3
3   A3   X3   X2  .11
4   A0   X5   X0    7
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:57:42