如何用Python为groupby分组生成指定数量的规则化测试数据?
Python生成指定规则测试数据实现方案
这个需求完全可以用Python实现,以下是针对三种分组类型的具体实现思路和代码示例:
核心实现逻辑
针对不同类型的VarName分组,我们可以通过配置化的方式定义规则,再编写通用生成逻辑:
1. 带数值范围的分组(如LtoV、Age)
- 先定义每个变量的数值范围和Score映射规则,生成随机数值后,通过预设规则匹配对应的Score。
- 例如LtoV范围0-100,Score按80+、50-79、<50分三档;Age范围18-60,按40+、25-39、<25分三档。
2. 字符串类型分组(如Indicator)
- 定义固定字符串值,循环生成指定行数,Score可设为固定值(或根据需求自定义规则)。
3. 逗号分隔值的分组(如Oc Code)
- 将逗号分隔的字符串拆分为列表,通过取模循环的方式重复生成值,直到达到指定行数(比如列表有3个值,生成20行就循环6次加前2个值)。
完整代码示例
import random import pandas as pd # 配置各个VarName的生成规则 var_config = { "LtoV": { "type": "numeric_range", "range": (0, 100), # 数值范围(整数) "score_rule": lambda x: 5 if x >= 80 else 3 if x >= 50 else 1 }, "Age": { "type": "numeric_range", "range": (18, 60), "score_rule": lambda x: 4 if x >= 40 else 2 if x >= 25 else 1 }, "Indicator": { "type": "fixed_string", "value": "Yes", "fixed_score": 3 }, "Oc Code": { "type": "comma_split", "raw_value": "A,B,C", "fixed_score": 2 } } def generate_test_data(rows_per_var): """按每个VarName生成指定行数的测试数据""" result = [] for var_name, config in var_config.items(): if config["type"] == "numeric_range": # 生成范围内随机数值,并匹配Score for _ in range(rows_per_var): num_val = random.randint(*config["range"]) score = config["score_rule"](num_val) result.append({ "VarName": var_name, "Value": num_val, "Score": score }) elif config["type"] == "fixed_string": # 循环重复固定字符串 for _ in range(rows_per_var): result.append({ "VarName": var_name, "Value": config["value"], "Score": config["fixed_score"] }) elif config["type"] == "comma_split": # 拆分逗号值后循环生成 val_list = config["raw_value"].split(",") list_len = len(val_list) for i in range(rows_per_var): current_val = val_list[i % list_len] result.append({ "VarName": var_name, "Value": current_val, "Score": config["fixed_score"] }) # 转换为DataFrame方便查看和导出 return pd.DataFrame(result) # 调用示例:每个VarName生成20行数据 test_data = generate_test_data(20) # 可以导出为CSV # test_data.to_csv("test_data.csv", index=False) print(test_data.head())
内容的提问来源于stack exchange,提问作者Sri Vidhya
相关产品推荐
相关产品推荐

