在包含零的(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
有什么问题,我该怎么解决?
这是因为 np.random.randint 可能会返回相同的值两次,而此冗余将被pandas删除(检查 df[[1, 1]] )中。所以你可以用 np.random.choice(80, 30, replace=False) 是的。
np.random.randint
df[[1, 1]]
np.random.choice(80, 30, replace=False)
生成的随机整数不必是唯一的。因此,相同的索引被多次设置为1。我相信你每次运行它都会得到不同的金额。
你可以用 random.sample(range(0,80), 30) 在范围内生成30个唯一索引。
random.sample(range(0,80), 30)
Doc