【问题标题】:Generate N unique random integers within a specified range生成指定范围内的 N 个唯一随机整数
【发布时间】:2018-12-17 17:01:57
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python pandas numpy dataframe random


    【解决方案1】:

    这是因为对np.random.randint 的调用可能会两次返回相同的值,而这种冗余被pandas 带走了(检查df[[1, 1]])。所以你可以改用np.random.choice(80, 30, replace=False)

    【讨论】:

      【解决方案2】:

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

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

      Doc

      【讨论】:

        猜你喜欢
        • 2014-05-15
        • 1970-01-01
        • 2011-05-16
        • 1970-01-01
        • 2011-08-02
        • 2015-07-21
        • 2015-10-24
        • 2016-01-03
        • 1970-01-01
        相关资源
        最近更新 更多