如何基于DataFrame分类变量的取值范围生成指定数量随机数
你可以用pandas+numpy实现该需求,以下是可直接运行的完整代码:
首先导入依赖库:
import pandas as pd import numpy as np
先构造和你截图结构一致的示例原始DataFrame,你可以直接替换成你自己的原始数据:
df_origin = pd.DataFrame({ 'name': ['A', 'B'], 'var1_min': [1, 10], 'var1_max': [5, 20], 'var2_min': [0.2, 1.5], 'var2_max': [0.8, 3.2], 'var3_min': [100, 500], 'var3_max': [200, 800] })
固定列数实现(变量少的场景更直观)
gen_num = 5 # 每个条目生成的样本数量,可自行修改 result_list = [] for _, row in df_origin.iterrows(): # 按对应区间生成每个变量的随机值 temp_df = pd.DataFrame({ 'name': [row['name']]*gen_num, 'sample_id': range(1, gen_num+1), 'var1': np.random.uniform(row['var1_min'], row['var1_max'], gen_num), 'var2': np.random.uniform(row['var2_min'], row['var2_max'], gen_num), 'var3': np.random.uniform(row['var3_min'], row['var3_max'], gen_num) }) result_list.append(temp_df) # 合并得到最终结果 df_result = pd.concat(result_list, ignore_index=True)
自动适配变量列实现(变量多的场景更便捷)
不需要手动枚举每个变量,自动识别所有带_min/_max后缀的列批量生成:
gen_num = 5 result_list = [] # 自动提取所有变量前缀 var_cols = list(set([col.replace('_min', '').replace('_max', '') for col in df_origin.columns if col.endswith(('_min', '_max'))])) for _, row in df_origin.iterrows(): temp_dict = { 'name': [row['name']]*gen_num, 'sample_id': range(1, gen_num+1) } for var in var_cols: temp_dict[var] = np.random.uniform(row[f'{var}_min'], row[f'{var}_max'], gen_num) result_list.append(pd.DataFrame(temp_dict)) df_result = pd.concat(result_list, ignore_index=True)
如果需要生成整数随机值,把np.random.uniform替换为np.random.randint即可;如果需要固定随机结果方便复现,在生成代码前加np.random.seed(42)即可,数字可自行修改。
内容的提问来源于stack exchange,提问作者IronMaiden
相关产品推荐
相关产品推荐

