如何将 DataFrame 中的 K 个随机值附加到没有重复的列表列表中?

How to append K random values from DataFrame to list of lists with no duplicates?

我有以下形式的数据框:

1 2 3 4 5 6 7 8 
A C C T G A T C
C A G T T A D N
Y F V H Q A F D

我需要随机 select 一列 k 次,其中 k 是给定样本中的列数。我的程序创建了一个大小为 k 的空列表列表,然后随机 selects 从要附加到列表的数据框中添加一列。每个列表必须是唯一的,不能有重复项。

从上面的示例数据框中,预期输出应该是这样的:

[[2][4][6][1][7][3][5][8]]

但是我得到的结果如下:

[[1][1][3][6][7][8][8][2]]

执行此操作的最 pythonic 方法是什么?这是我抱歉的尝试:

k = len(df.columns)
k_clusters = [[] for i in range(k)]

for i in range(len(k_clusters)):
    for j in range(i + 1, len(k_clusters)):
        k_clusters[i].append((df.sample(1, axis=1)))
        if k_clusters[i] == k_clusters[j]:
            k_clusters[j].pop(0)
            k_clusters[j].append(df.sample(1, axis=1)

您可以使用 numpy.random.shuffle 来随机排列列索引。因为根据你的问题,这就是我假设你想要做的。

一个例子:

import numpy as np

to_shuffle = np.array(df.columns)
np.random.shuffle(to_shuffle)
print(to_shuffle)

除了洗牌步骤之外,您的问题与 How to change the order of DataFrame columns? 非常相似。在 Python:

中可以通过多种方式进行洗牌
cols = np.array(df.columns)
np.random.shuffle(cols)

或者使用标准库:

cols = list(df.columns)
random.shuffle(cols)

不想cols = df.columns.values,因为那样会给您底层列名数据的写入权限。然后,您最终会就地改组列名,弄乱您的数据框。

然后重新排列您的列很容易:

df = df[cols]