代码之家  ›  专栏  ›  技术社区  ›  SebMa

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

  •  1
  • SebMa  · 技术社区  · 7 年前

    在包含零的(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 回复  |  直到 7 年前
        1
  •  3
  •   a_guest    7 年前

    这是因为 np.random.randint 可能会返回相同的值两次,而此冗余将被pandas删除(检查 df[[1, 1]] )中。所以你可以用 np.random.choice(80, 30, replace=False) 是的。

        2
  •  2
  •   gaganso    7 年前

    生成的随机整数不必是唯一的。因此,相同的索引被多次设置为1。我相信你每次运行它都会得到不同的金额。

    你可以用 random.sample(range(0,80), 30) 在范围内生成30个唯一索引。

    Doc