DataFrame中按条件为每行生成同组一致随机数的实现咨询
实现方案(Python Pandas)
以下代码可以直接满足需求,运行后输出和你给出的示例一致:
import pandas as pd import numpy as np # 构造示例DataFrame,你可以替换成自己的数据源 data = { 'id': [1111, 1111, 2222, 3333, 4444], 'names': ['name1', 'name2', 'name1', 'name2', 'name2'], 'code': ['jflsdf3r8fhldfskdjbf29', 'sljncidbviwbedsdvjfb', 'jflsdf3r8fhldfskdjbf29', 'sadovnadnfadfadgdaf', 'sadovnadnfadfadgdaf'] } df = pd.DataFrame(data) # 给每个唯一code分配初始随机数,固定seed是为了复现结果,不需要可以删除 np.random.seed(42) code_unique = df['code'].unique() code_rand_map = dict(zip(code_unique, np.random.randint(1, 100, size=len(code_unique)))) # 统一同一id下所有关联code的随机数 id_rand_map = df.groupby('id')['code'].first().map(code_rand_map).to_dict() for id_val, group_df in df.groupby('id'): for code_val in group_df['code'].unique(): code_rand_map[code_val] = id_rand_map[id_val] # 映射生成新列 df['random_number'] = df['code'].map(code_rand_map) # 可选:将随机数转换为1、2、3这类连续编号,和示例输出格式完全匹配 df['random_number'] = pd.factorize(df['random_number'])[0] + 1
逻辑说明
- 首先给每一个唯一的
code生成独立的初始随机数 - 再以
id为基准,把同一个id对应的所有code的随机数统一为同一个值,保证同一id、同一code的随机数都一致 - 最后把映射关系回写到原DataFrame生成新列
- 如果不需要连续的编号,删除最后一行可选代码即可
内容的提问来源于stack exchange,提问作者Y.C.T
相关产品推荐
相关产品推荐

