如何将 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]
我有以下形式的数据框:
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]