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

如何按比例随机映射复购客户数据至指定类别并设置随机种子?

按比例随机划分复购客户类别并保证结果可复现

需求说明

现有数据集记录了客户是否为复购客户,需要对标记为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)

代码关键说明

  1. 随机种子固定:np.random.seed(42)锁定随机数生成逻辑,每次运行代码都会得到完全一致的划分结果,满足可复现要求。
  2. 精准筛选目标行:通过布尔索引mask定位所有复购客户,避免误修改非复购客户(标记为no)的数据。
  3. 比例控制:np.random.choice的p参数直接指定两个类别的概率占比,size参数匹配复购客户的数量,确保分配比例符合需求。
  4. 原地更新数据:用df_test.loc[mask, ...]将生成的新标签批量替换原数据,高效且不破坏原有数据结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:52:22