如何随机选择二维DataFrame部分列并打乱列内数值?
解决方案:仅打乱DataFrame/数组的指定随机列
针对Pandas DataFrame的实现
步骤1:构造示例数据(或导入你的DataFrame)
import pandas as pd import numpy as np # 还原你提供的示例DataFrame data = [ [5,3,7,1,2,9], [1,7,5,3,0,8], [0,2,7,1,6,5], [8,4,2,1,9,7], [2,9,5,6,3,4], [7,5,8,2,1,0] ] df = pd.DataFrame(data)
步骤2:选择要打乱的列
- 方式一:随机指定数量的列(比如随机选3列)
# 从所有列中随机选3个不重复的列 cols_to_shuffle = np.random.choice(df.columns, size=3, replace=False)
- 方式二:手动指定列(对应你示例中的第1、2、最后一列,索引为1、2、5)
cols_to_shuffle = [1, 2, 5]
步骤3:仅打乱选中列的内部数值
遍历选中的列,用np.random.permutation生成随机排列后替换原列:
for col in cols_to_shuffle: df[col] = np.random.permutation(df[col])
执行后,只有指定列的数值被打乱,其他列保持原始顺序,和你给出的示例结果逻辑一致。
针对Numpy数组的实现
如果你用的是Numpy二维数组,逻辑类似:
import numpy as np # 构造示例数组 arr = np.array([ [5,3,7,1,2,9], [1,7,5,3,0,8], [0,2,7,1,6,5], [8,4,2,1,9,7], [2,9,5,6,3,4], [7,5,8,2,1,0] ]) # 随机选3列 cols_to_shuffle = np.random.choice(arr.shape[1], size=3, replace=False) # 对选中列执行in-place打乱 for col in cols_to_shuffle: np.random.shuffle(arr[:, col])
纠正你原代码的问题
你之前写的np.random.random(df)是生成和输入形状相同的随机数组,并非打乱原有数据。如果要实现全列打乱,正确代码应为:
- Pandas版本:
df = df.apply(np.random.permutation)
- Numpy版本:
for col in range(arr.shape[1]): np.random.shuffle(arr[:, col])
内容的提问来源于stack exchange,提问作者user23487612
相关产品推荐
相关产品推荐

