如何用Python根据CSV行中条件生成对应范围的随机数?
根据条件为现有DataFrame填充随机数
方法1:自定义函数 + apply()
适合数据量不大的场景,逻辑直观易懂:
首先导入依赖库:
import pandas as pd import numpy as np
定义生成随机数的函数,根据每行的Letter值返回对应范围的整数:
def get_random_num(row): match row['Letter']: case 'A': return np.random.randint(1, 6) # 左闭右开区间,生成1-5的整数 case 'B': return np.random.randint(2, 7) # 生成2-6的整数 case 'C': return np.random.randint(3, 8) # 生成3-7的整数 case _: return None # 处理未定义的Letter值
直接对Random Number列赋值:
df['Random Number'] = df.apply(get_random_num, axis=1)
方法2:np.select() 向量化操作
适合大数据量场景,效率远高于逐行处理:
import pandas as pd import numpy as np # 定义条件列表 conditions = [ df['Letter'] == 'A', df['Letter'] == 'B', df['Letter'] == 'C' ] # 对应条件的随机数数组(提前生成对应长度的数组) choices = [ np.random.randint(1, 6, size=len(df)), np.random.randint(2, 7, size=len(df)), np.random.randint(3, 8, size=len(df)) ] # 填充Random Number列 df['Random Number'] = np.select(conditions, choices, default=None)
补充说明
- 如果需要生成浮点数,把
np.random.randint替换为np.random.uniform,比如np.random.uniform(1, 5)会生成1到5之间的随机浮点数 - 若要固定随机种子保证结果可复现,在生成随机数前添加
np.random.seed(42)(数字可自定义)
内容的提问来源于stack exchange,提问作者C Bach
相关产品推荐
相关产品推荐

