在一个包含零的(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
出什么问题了,我该如何解决?
答案 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个唯一索引。