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

如何在DataFrame中随机选择指定比例的值并设置为0?

解决DataFrame随机置0指定比例元素的问题

要实现将DataFrame中1/10的元素随机设为0,且不局限于特定行或列,推荐以下高效方法:

方法一:利用扁平索引直接修改(最优)

这种方式将整个DataFrame视为一维数组,随机选择不重复的索引进行修改,保证每个元素被选中的概率一致,且实现高效:

import numpy as np
import pandas as pd

# 计算需要置0的元素数量(123*100/10=1230)
num_to_zero = df.size // 10

# 生成不重复的随机扁平索引
random_indices = np.random.choice(df.size, num_to_zero, replace=False)

# 直接修改对应位置的值为0
df.values.flat[random_indices] = 0

方法二:生成随机行列对修改

如果需要更直观地控制行和列的选择,可以生成随机的行号和列号组合,同时避免重复选中同一位置:

import numpy as np
import pandas as pd

num_to_zero = df.size // 10

# 生成所有可能的(row, col)位置对
all_positions = [(row, col) for row in range(df.shape[0]) for col in range(df.shape[1])]
# 随机挑选指定数量的位置
selected = np.random.choice(len(all_positions), num_to_zero, replace=False)

# 遍历选中的位置置0
for idx in selected:
    row, col = all_positions[idx]
    df.iloc[row, col] = 0

为什么不推荐固定行列交叉的方式

你之前尝试的选择12行+10列交叉区域的方法,会导致置0的元素集中在这些行和列的交叉点,无法实现全局随机分布,而且实际修改的元素数量(12*10=120)远小于需要的1230个,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:32:14