Pandas:用range中的随机整数在df中创建新列



我有一个包含50k行的pandas数据框架。我正在尝试添加一个新列,这是一个随机生成的整数从1到5。

如果我想要50k个随机数,我会使用:

df1['randNumCol'] = random.sample(xrange(50000), len(df1))

但是对于这个我不知道该怎么做。

R的边注,我会这样做:

sample(1:5, 50000, replace = TRUE)

有什么建议吗?

一个解决方案是使用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))设置种子

添加一列随机整数,使用randint(low, high, size)。没有必要浪费内存分配range(low, high),这是Python 2.x中曾经做过的;如果high是大的,这可能是很多内存。

df1['randNumCol'] = np.random.randint(0,5, size=len(df1))

指出:

  • 当我们只添加一个列时,size只是一个整数。一般来说,如果我们想要生成randint()s的数组/数据帧,大小可以是元组,如Pandas:如何创建随机整数的数据帧?)
  • 在Python 3中。x range(low, high)不再分配列表(可能使用大量内存),它产生range()对象
  • 预先使用random.seed(...),以确保确定性和可重复性

一个不需要为numpy额外导入的选项:

df1['randNumCol'] = pd.Series(range(1,6)).sample(int(5e4), replace=True).array

相关内容

  • 没有找到相关文章

最新更新