我有一个50k行的Pandas数据框,我想添加一个新的列,它是一个随机生成的1到5的整数。如果我想要5万个随机数,我会用途:
df1['randNumCol'] = random.sample(xrange(50000), len(df1))
但我不知道该怎么做。R边注,我会这样做:
sample(1:5, 50000, replace = TRUE)
有什么建议吗?
mwkjh3gx1#
一种解决方案是使用numpy.random.randint:
numpy.random.randint
import numpy as np df1['randNumCol'] = np.random.randint(1, 6, df1.shape[0])
或者,如果数字不连续(尽管较慢),则可以使用以下命令:
df1['randNumCol'] = np.random.choice([1, 9, 20], df1.shape[0])
为了使结果可重现,您可以使用numpy.random.seed设置种子(例如np.random.seed(42))
numpy.random.seed
np.random.seed(42)
odopli942#
要添加一列随机整数,使用randint(low, high, size),不需要浪费内存分配range(low, high),这是Python 2.x中的做法;如果high很大,则这可能是大量存储器。
randint(low, high, size)
range(low, high)
high
df1['randNumCol'] = np.random.randint(0,5, size=len(df1))
注:
size
randint()s
range()
random.seed(...)
icomxhvb3#
一个不需要为numpy进行额外导入的选项:
df1['randNumCol'] = pd.Series(range(1,6)).sample(int(5e4), replace=True).array
3条答案
按热度按时间mwkjh3gx1#
一种解决方案是使用
numpy.random.randint
:或者,如果数字不连续(尽管较慢),则可以使用以下命令:
为了使结果可重现,您可以使用
numpy.random.seed
设置种子(例如np.random.seed(42)
)odopli942#
要添加一列随机整数,使用
randint(low, high, size)
,不需要浪费内存分配range(low, high)
,这是Python 2.x中的做法;如果high
很大,则这可能是大量存储器。注:
size
只是一个整数。一般来说,如果我们想生成一个randint()s
的数组/ Dataframe ,那么size可以是一个 tuple,如Pandas: How to create a data frame of random integers?)range(low, high)
no longer allocates a list (potentially using lots of memory), it produces arange()
objectrandom.seed(...)
进行确定性和再现性icomxhvb3#
一个不需要为numpy进行额外导入的选项: