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

如何在for循环中控制Condition 3固定出现x次,其余随机选1/2

需求与代码修改方案

需求:现有代码会随机从3个条件中选择生成DataFrame的行条件,现在要改成每个分组中Condition 3固定选中x次,剩余次数随机选择Condition 1和2,外层循环次数由num_groups控制。

修改后的完整代码:

import pandas as pd
import numpy as np

num_rows = 3
num_cols = 4
num_groups = 2
# 新增参数:每个分组中Condition3的固定选中次数
x = 1
# 合法性校验:避免x超出合理范围
if x < 0 or x > num_rows:
    raise ValueError("x必须是0到num_rows之间的整数")

dfs = []

for group in range(num_groups):
    df = pd.DataFrame()
    
    # 修改条件生成逻辑:固定x个Condition3,剩余随机选1/2,再打乱顺序
    conditions = [3] * x
    # 补充剩余行数的条件,仅从1、2中随机选择
    conditions += np.random.choice([1, 2], size=num_rows - x).tolist()
    # 打乱数组顺序,保证条件分布随机
    np.random.shuffle(conditions)

    for condition in conditions:
        if condition == 1:
            row_data = ['X'] * (num_cols // 2) + ['-'] * (num_cols // 2)
        elif condition == 2:
            row_data = ['-'] * (num_cols // 2) + ['X'] * (num_cols // 2)
        elif condition == 3:
            row_data = ['X'] * num_cols

        temp_df = pd.DataFrame([row_data])
        df = pd.concat([df, temp_df], ignore_index=True)

    dfs.append(df)

# 后续输出处理逻辑保持原有逻辑不变
out = pd.concat(dfs, keys=range(len(dfs)))
out.index = pd.MultiIndex.from_arrays([out.index.get_level_values(0),
                                       range(len(out))])

out = out.stack().unstack([0, -1], fill_value='.')
out = out.set_axis(range(out.shape[1]), axis=1)

print(out)

关键修改说明:

  • 新增参数x,明确每个分组中Condition3的固定出现次数,同时增加合法性校验避免参数错误
  • 重构conditions数组生成逻辑:
    1. 先创建包含x个3的基础列表
    2. 用np.random.choice生成剩余行数的条件,仅从[1,2]中随机选取
    3. 用np.random.shuffle打乱整个列表,避免Condition3集中出现在固定位置
  • 行生成、DataFrame拼接及后续输出逻辑保持原有逻辑不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:42:19