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

如何在Pandas DataFrame中随机为50%的单元格赋值'X'?

问题与解决方案

问题背景

现有如下Pandas DataFrame:

1   1   1   1
1   1   1   1
1   1   1   1
1   1   1   1

通过以下代码可将DataFrame中50%随机选中行的所有列赋值为'X':

samples_indices = df.sample(frac=0.5, replace=False).index
df.loc[samples_indices] = 'X'

执行后效果:

X   X   X   X
1   1   1   1
X   X   X   X
1   1   1   1

需求:为DataFrame中50%的随机单元格赋值'X',示例效果如下:

X   X   X   1
1   X   1   1
X   X   X   1
1   1   1   X

解决方案

方法1:使用numpy生成随机掩码(快速简洁)

利用numpy生成与DataFrame形状一致的随机布尔矩阵,直接定位需要修改的单元格:

import pandas as pd
import numpy as np

# 构造初始全1的4x4 DataFrame
df = pd.DataFrame(np.ones((4, 4), dtype=int))

# 生成掩码:50%概率为True,对应需要设为'X'的单元格
mask = np.random.choice([True, False], size=df.shape, p=[0.5, 0.5])

# 为掩码选中的单元格赋值
df[mask] = 'X'

方法2:通过stack抽样(精确控制选中数量)

如果需要确保精确选中50%的单元格(当总单元格数为偶数时),可以将DataFrame堆叠为一维Series后抽样:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.ones((4, 4), dtype=int))

# 将DataFrame堆叠为一维Series,每个元素对应原DataFrame的一个单元格
stacked_df = df.stack()

# 抽取50%的元素
sampled_cells = stacked_df.sample(frac=0.5)

# 将选中的单元格设为'X'
stacked_df.loc[sampled_cells.index] = 'X'

# 还原为原形状的DataFrame
df = stacked_df.unstack()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:00:59