我有一个50k行的pandas数据框。我正在尝试添加一个新列,它是从1到5的随机生成的整数。
如果我想要50k随机数,我会使用:
df1['randNumCol'] = random.sample(xrange(50000), len(df1))
但为此我不知道该怎么做。
R中的旁注,我会这样做:
sample(1:5, 50000, replace = TRUE)
有什么建议吗?
答案 0 :(得分:61)
一种解决方案是使用np.random.randint
:
import numpy as np
df1['randNumCol'] = np.random.randint(1, 6, df1.shape[0])
# or if the numbers are non-consecutive (albeit slower)
df1['randNumCol'] = np.random.choice([1, 9, 20], df1.shape[0])
为了使结果可重现,您可以使用np.random.seed(42)
设置种子。
答案 1 :(得分:12)
要添加一列随机整数,请使用randint(low, high, size)
。没有必要浪费内存分配range(low, high)
;如果high
很大,那可能会占用大量内存。
df1['randNumCol'] = np.random.randint(0,5, size=len(df1))
(另请注意,当我们只添加单个列时,size
只是一个整数。通常,如果我们要生成randint()s
的数组/数据帧,则大小可以是一个元组,如Pandas: How to create a data frame of random integers?)