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

Python按列B分组生成ID及跨执行续接ID的实现方案咨询

问题1:为Column B分组生成唯一ID列

要实现对Column B的每个唯一分组生成带固定前缀ID_的两位数字ID,可借助pandas的factorize方法为每个唯一值分配递增整数标识,再格式化字符串即可:

import pandas as pd

# 构造示例数据
data = {
    'Column A': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
    'Column B': ['123', '123', '123', '456', '456', '988', '988', '233', '233', '654', '654', '654']
}
df = pd.DataFrame(data)

# 生成ID列:对Column B的唯一分组分配从1开始的递增ID,格式为ID_XX
df['ID'] = 'ID_' + (pd.factorize(df['Column B'])[0] + 1).astype(str).str.zfill(2)

print(df)

执行后每个Column B的相同值对应同一个ID,不同值按出现顺序生成递增ID,与预期输出一致。


问题2:下次执行从上次最后ID继续生成

要实现跨执行会话的ID连续性,需将上次生成的最大ID值持久化存储(比如文本文件),下次启动时读取该值作为起始点:

核心步骤:

  1. 读取本地存储的上次最大ID(文件不存在则默认从1开始)
  2. 对新数据的Column B去重,为每个唯一值分配从起始ID开始的递增ID
  3. 更新本地存储的最大ID为本次生成的最后一个ID

代码实现:

import pandas as pd

def load_last_id(file_path='last_id.txt'):
    """读取上次保存的最大ID数值"""
    try:
        with open(file_path, 'r') as f:
            return int(f.read().strip())
    except FileNotFoundError:
        return 1  # 首次执行默认从1开始

def save_last_id(last_id, file_path='last_id.txt'):
    """保存本次生成的最大ID数值"""
    with open(file_path, 'w') as f:
        f.write(str(last_id))

# 新数据示例
new_data = {
    'Column A': ['C', 'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D'],
    'Column B': ['567', '567', '567', '098', '098', '200', '111', '123', '123', '450']
}
df_new = pd.DataFrame(new_data)

# 获取上次最后ID作为起始点
start_id = load_last_id()

# 为新数据的Column B唯一值创建ID映射
unique_b_values = df_new['Column B'].unique()
id_mapping = {
    b_val: f'ID_{(start_id + idx):02d}' 
    for idx, b_val in enumerate(unique_b_values)
}

# 映射生成ID列
df_new['ID'] = df_new['Column B'].map(id_mapping)

# 计算并保存本次的最大ID
current_max_id = start_id + len(unique_b_values)
save_last_id(current_max_id)

print(df_new)

注意事项:

  • 如果涉及并发操作,建议改用数据库存储或加锁机制避免ID冲突
  • 存储文件路径可根据实际需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:20:33