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

如何随机选择二维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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:17:19