如何按比例随机映射复购客户数据至指定类别并设置随机种子?
按比例随机划分复购客户类别并保证结果可复现
需求说明
现有数据集记录了客户是否为复购客户,需要对标记为yes的复购客户做如下处理:
- 随机选取约25%的客户,将其类别改为
yes 1 purchase - 剩余约75%的客户,类别改为
yes >1 purchase - 必须设置随机种子,确保每次运行结果一致
解决方案代码
import pandas as pd import numpy as np # 原始数据 list_customer_name = ['customer1','customer2','customer3','customer4','customer5', 'customer6','customer7','customer8','customer9','customer10','customer11','customer12', 'customer13','customer14','customer15','customer16','customer17','customer18'] list_return_customer = ['yes','yes','yes','yes','yes','yes', 'yes','yes','yes','yes','yes','yes','yes','yes', 'yes','yes','no','no'] df_test = pd.DataFrame({'customer_name': list_customer_name, 'return_customer?':list_return_customer}) # 设置随机种子,保证结果可复现 np.random.seed(42) # 筛选出所有复购客户的行 mask = df_test['return_customer?'] == 'yes' # 按25%/75%的比例随机生成新类别标签 new_labels = np.random.choice( ['yes 1 purchase', 'yes >1 purchase'], size=mask.sum(), p=[0.25, 0.75] ) # 将新标签替换原有的"yes"值 df_test.loc[mask, 'return_customer?'] = new_labels print(df_test)
代码关键说明
- 随机种子固定:
np.random.seed(42)锁定随机数生成逻辑,每次运行代码都会得到完全一致的划分结果,满足可复现要求。 - 精准筛选目标行:通过布尔索引
mask定位所有复购客户,避免误修改非复购客户(标记为no)的数据。 - 比例控制:
np.random.choice的p参数直接指定两个类别的概率占比,size参数匹配复购客户的数量,确保分配比例符合需求。 - 原地更新数据:用
df_test.loc[mask, ...]将生成的新标签批量替换原数据,高效且不破坏原有数据结构。
内容的提问来源于stack exchange,提问作者user032020
相关产品推荐
相关产品推荐

