如何为含客户ID的dataframe创建随机均衡赋值0/1/2的group_user新列
实现DataFrame均衡随机分组的方法
你可以通过Python的numpy库快速实现需求,以下是两种常用实现方案:
方案1:简洁随机抽样(适合绝大多数场景)
直接调用numpy.random.choice方法,指定三个取值的概率均为1/3即可,代码如下:
import pandas as pd import numpy as np # 假设你已提前构造好包含ID列的DataFrame,变量名为df # 若需要固定随机结果方便复现,可加下行设置随机种子,不需要可删除 np.random.seed(42) # 核心逻辑:生成0、1、2的随机序列,比例均衡 df['group_user'] = np.random.choice([0, 1, 2], size=len(df), p=[1/3, 1/3, 1/3])
你可以通过df['group_user'].value_counts()验证分组占比,三个取值的样本量差异最多为1,符合均衡要求。
方案2:精准均等分配(对分组均衡度要求极高时使用)
如果你的样本量是3的整倍数,或者要求分组样本量差异必须控制在最小范围,可以用洗牌法实现完全均等分配:
import pandas as pd import random # 生成分组标签 label_list = [0, 1, 2] * (len(df) // 3) # 处理样本量无法被3整除的剩余部分 remain_num = len(df) % 3 if remain_num > 0: label_list += random.sample([0, 1, 2], remain_num) # 打乱标签顺序 random.shuffle(label_list) # 赋值到新列 df['group_user'] = label_list
两种方案最终输出的格式都和你给出的示例一致:
| ID | group_user |
|---|---|
| 341 | 1 |
| 127 | 0 |
| 389 | 2 |
内容的提问来源于stack exchange,提问作者ilymp
相关产品推荐
相关产品推荐

