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

如何用np.random.randint为Pandas DataFrame特定记录生成不同随机值?

解决Pandas中为匹配行生成不同随机值的问题

你的问题核心是:当用np.random.randint(25,34)直接赋值时,它只会生成单个随机整数,导致所有匹配行都被设置为同一个值。要实现每行对应不同的随机值,需要生成与匹配行数相等的随机数组,再进行赋值。

方法一:向量化赋值(推荐,效率更高)

先创建匹配条件的掩码,再生成对应长度的随机数组:

import numpy as np
import pandas as pd

# 生成匹配掩码
mask = df['Age'] == '25-34 years old'
# 生成与匹配行数相同的随机整数数组,赋值给对应行
df.loc[mask, 'Age'] = np.random.randint(25, 34, size=mask.sum())
  • mask.sum()会计算出匹配到的记录数(也就是2365),np.random.randint的size参数控制生成随机数的数量,这样每个匹配行都会得到一个独立的随机值。

方法二:使用apply逐行处理(逻辑直观)

通过apply对每行的Age值进行判断,符合条件则生成随机数:

df['Age'] = df['Age'].apply(lambda x: np.random.randint(25, 34) if x == '25-34 years old' else x)

这种方法逐行处理数据,适合小数据集;如果数据量很大(比如你的2365条甚至更多),方法一的向量化操作效率会更高。

纠正你之前的错误尝试

  • 第一个for循环逻辑完全错误:遍历DataFrame的列(x.columns),然后取第1行的列值进行判断,这和你要修改所有行的Age值的需求不匹配,而且循环遍历修改DataFrame效率极低,不推荐使用。
  • 第二种方法的问题在于没有指定size参数,导致只生成单个随机值,所有匹配行共享这个值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:45:17