如何修改Python随机生成代码,实现1-100区间动态随机整数输出?
解决混合固定值与区间随机整数的生成问题
你的问题出在np.random.choice的参数a初始化逻辑上:random.randint(0, 100)只会在创建数组a时执行一次,生成一个固定整数,后续np.random.choice每次选中第二个选项时,只会重复使用这个固定值,所以30%的字段都是同一个数。
下面提供两种可行的修改方案:
方案一:用标记数组+批量替换(高效适合大数据量)
先通过概率生成标记数组,再把需要替换的位置批量生成随机整数:
import numpy as np import pandas as pd # 生成70%为0、30%为1的标记数组 marks = np.random.choice(a=[0, 1], size=100, p=[0.7, 0.3]) # 批量生成1-100的随机整数,再用where替换标记为1的位置 values = np.where(marks == 1, np.random.randint(1, 101, size=100), 0) # 转为DataFrame df_categories = pd.DataFrame(values, columns=['number'])
这里np.random.randint(1, 101, size=100)直接生成100个独立的随机整数,通过np.where精准替换到需要的位置,保证30%的数值都是不同的随机数。
方案二:逐元素生成(逻辑直观适合小数据量)
用列表推导式逐个判断概率并生成数值,每次生成随机数都会重新计算:
import pandas as pd import random # 列表推导式生成每个元素 values = [0 if random.random() < 0.7 else random.randint(1, 100) for _ in range(100)] # 转为DataFrame df_categories = pd.DataFrame(values, columns=['number'])
这种方式逻辑简单易懂,每个元素的生成都是独立判断,不会出现固定值问题。
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

