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

如何用循环批量生成含随机0和1的二进制DataFrame集合?

批量生成每列仅含一个1的0-1 DataFrame解决方案

原循环代码的问题

  • 没必要用双层循环:bins和binsx是一一对应的,双层循环会让每个变量被重复赋值4次,完全冗余
  • 错误覆盖数据:刚生成的随机数组被pd.DataFrame()直接覆盖成空表,后续操作根本没用到随机数据
  • 逻辑完全错了:[eachBin]==[eachBin].max()是在对字符串列表做比较,不是对生成的随机DataFrame操作,根本达不到目标

修正后的可运行代码

保持和单个生成一致的逻辑,用zip配对两个列表批量处理:

import numpy as np
import pandas as pd

bins = ['bin1_df', 'bin2_df', 'bin3_df', 'bin4_df']
binsx = ['binx1_df', 'binx2_df', 'binx3_df', 'binx4_df']

for bin_name, binx_name in zip(bins, binsx):
    # 生成随机数组并转为DataFrame,和单个生成逻辑一致
    rand_df = pd.DataFrame(np.random.rand(4,4))
    # 保存原始随机DataFrame到指定变量名
    vars()[bin_name] = rand_df
    # 按列标记最大值位置为1,其余为0
    vars()[binx_name] = (rand_df == rand_df.max()).astype(int)

更可靠的备选方案(避免极端多最大值情况)

如果担心某列出现多个相同最大值导致多1的情况,可直接随机选每列的1的位置:

import numpy as np
import pandas as pd

bins = ['bin1_df', 'bin2_df', 'bin3_df', 'bin4_df']
binsx = ['binx1_df', 'binx2_df', 'binx3_df', 'binx4_df']

for bin_name, binx_name in zip(bins, binsx):
    # 每列随机选一个行索引作为1的位置
    ones_positions = np.random.choice(4, size=4)
    # 初始化全0矩阵
    result_df = pd.DataFrame(np.zeros((4,4), dtype=int))
    # 给对应位置赋值1
    for col_idx, row_idx in enumerate(ones_positions):
        result_df.iloc[row_idx, col_idx] = 1
    # 保存结果
    vars()[binx_name] = result_df
    # 如需保留原始随机数组,可添加rand_df的生成和保存逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:30:08