首页 > 解决方案 > 每 n 行重复随机数

问题描述

我有一个包含 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 第二个随机数

-ETC

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

想法?先感谢您

标签: pythonpandas

解决方案


首先创建具有参数大小的数组,并对整数进行地板除法,然后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)

推荐阅读