【问题标题】:repeat random numbers each n rows每 n 行重复随机数
【发布时间】:2018-11-28 16:11:54
【问题描述】:

我有一个包含 2 列的大型数据框,如下所示:

                    dtm                SoC
      0     2018-03-01 00:00:00 +0000   39
      1     2018-03-01 00:00:01 +0000   39
      2     2018-03-01 00:00:02 +0000   39
      3     2018-03-01 00:00:03 +0000   39
     ...               ...              ...
2678393     2018-04-01 00:59:53 +0100   39
2678394     2018-04-01 00:59:54 +0100   39
2678395     2018-04-01 00:59:55 +0100   39
2678396     2018-04-01 00:59:56 +0100   39
2678397     2018-04-01 00:59:57 +0100   39
2678398     2018-04-01 00:59:58 +0100   39
2678399     2018-04-01 00:59:59 +0100   39

列 SoC 是 0 到 40 之间的随机生成数。我希望它是一个不同的随机数,每 86400 行重复一次(并且对于整个数据帧不一样)。

为了更清楚:

-rows 0-86399 第一个随机数

-rows 86400-172800 第二个随机数

-等

我正在尝试df['SoC']=np.repeat(random.randint(0,40),len(df)/86400),但出现错误“值的长度与索引的长度不匹配”

想法?提前谢谢你

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    首先创建参数大小为整数的数组,然后repeat

    #possible duplicated random values
    df['SoC'] = np.repeat(np.random.randint(0,40, size=len(df) // 86400), 86400)
    
    #unique random numbers
    df['SoC'] = np.repeat(np.random.choice(np.range(0, 40), 
                          size=len(df) // 86400, replace=False), 86400)
    

    【讨论】:

      【解决方案2】:

      另一种方式:

      arr = np.arange(40)
      np.random.shuffle(arr)
      arr
      
      array([15, 30, 21,  3, 10, 19, 13, 31,  5, 32,  1, 39, 24,  6, 12,  7, 22,
             38, 27, 20, 25, 35, 14, 28, 33, 18, 29, 17, 37, 36, 34,  8,  2,  0,
              4, 11, 16, 23, 26,  9])
      
      df['SoC'] = np.repeat(arr, 86400)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-01
        • 1970-01-01
        • 2014-07-12
        • 2015-07-15
        • 1970-01-01
        • 2013-04-23
        • 1970-01-01
        • 2015-11-10
        相关资源
        最近更新 更多