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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:33:38