You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在Pandas的assign方法中使用random模块会返回相同数值?

为什么assign结合random.randint生成的列全是相同值?

核心原因

  • random.randint(1,100)是单次调用生成一个单一整数,当你把它传给assign时,Pandas会将这个单一值广播到整个列的所有行,因此整列数值完全相同。
  • 你之前的误解是认为assign会为每一行单独调用一次random.randint,但实际上assign的参数是先计算出结果再赋值给列——也就是说,random.randint(1,100)在assign执行前就已经算出一个固定值,之后这个值被填充到列的每一行。

对比np.random.randint的逻辑

np.random.randint(1, 100, size=n)是直接生成一个长度为n的随机整数数组,每个元素都是独立的随机值,因此赋值给列后每一行数值不同。注意:numpy的randint是左闭右开区间,若要包含100,需写成np.random.randint(1, 101, size=n)。

正确的assign用法

如果你想用assign生成整列不同的随机值,有两种可行方式:

  1. 推荐:用numpy矢量化随机函数(效率更高)
df_test = df_test.assign(randomNumber = np.random.randint(1, 101, size=n))

矢量化操作是Pandas和numpy的最佳实践,远快于逐行处理。

  1. 逐行生成(适合自定义逐行逻辑场景)
df_test = df_test.assign(randomNumber = lambda df: [random.randint(1,100) for _ in range(len(df))])

或者用apply逐行调用:

df_test = df_test.assign(randomNumber = lambda df: df.apply(lambda _: random.randint(1,100), axis=1))

注意:这种逐行处理效率较低,数据量大时不建议使用。

内容的提问来源于stack exchange,提问作者freshpork

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:06:33