生成指定范围内的N个唯一随机整数

时间:2018-07-09 23:19:49

标签: python pandas numpy dataframe random

在一个包含零的(1,80)数据帧中,我想在随机位置将N(= 30)个值设置为1,所以我尝试了此操作:

df = pd.DataFrame( 0, index = range(1), columns = range(80) )
df[ np.random.randint(80, size=30) ] = 1

但是如果我检查,我得到25个“ 1”而不是30个:

( df.loc[0] == 1 ).sum()
25

出什么问题了,我该如何解决?

2 个答案:

答案 0 :(得分:3)

这是因为对np.random.randint的调用可能会两次返回相同的值,并且这种冗余被熊猫夺走了(请检查df[[1, 1]])。因此,您可以使用np.random.choice(80, 30, replace=False)

答案 1 :(得分:2)

生成的随机整数不必是唯一的。因此,相同的索引将多次设置为1。我确信每次运行都会得到不同的总和。

您可以使用random.sample(range(0,80), 30)来生成该范围内的30个唯一索引。

Doc