如何按给定区间分布要求使用pandas生成未排序随机数Series
实现思路
- 先按要求的比例分别从三个指定区间抽取对应数量的随机数
- 拼接所有抽取到的数值后打乱顺序
- 转换为pandas Series格式即可
完整代码示例
import numpy as np import pandas as pd # 给定的scope范围 scope = np.arange(0, 1000) # 可自定义生成的Series总长度,这里以1000为例 n_total = 1000 # 划分三个区间 range1 = scope[0:201] # 0~200区间 range2 = scope[201:501] # 201~500区间 range3 = scope[501:] # 501~999区间 # 按比例抽取对应数量的数值,replace=True允许重复,设为False则不允许重复(需确认对应区间长度足够) sample1 = np.random.choice(range1, size=int(n_total*0.1), replace=True) sample2 = np.random.choice(range2, size=int(n_total*0.1), replace=True) sample3 = np.random.choice(range3, size=n_total - len(sample1) - len(sample2), replace=True) # 拼接并打乱顺序 all_samples = np.concatenate([sample1, sample2, sample3]) np.random.shuffle(all_samples) # 转换为pandas Series result_series = pd.Series(all_samples)
分布验证(可选)
如果需要确认生成结果的分布符合要求,可以用以下代码统计:
p1 = len(result_series[(result_series >=0) & (result_series <=200)]) / len(result_series) p2 = len(result_series[(result_series >=201) & (result_series <=500)]) / len(result_series) p3 = len(result_series[(result_series >=501) & (result_series <=999)]) / len(result_series) print(f"0~200占比: {p1:.1%}, 201~500占比: {p2:.1%}, 501~999占比: {p3:.1%}")
内容的提问来源于stack exchange,提问作者Mishko
相关产品推荐
相关产品推荐

