Как добавить K случайных значений из DataFrame в список списков без дубликатов? - PullRequest
1 голос
/ 28 октября 2019

У меня есть следующий фрейм данных формы:

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

Мне нужно случайным образом выбрать столбец k раз, где k - количество столбцовв данном примере. Моя программа создает список пустых списков размером k , а затем случайным образом выбирает столбец данных из фрейма данных для добавления в список. Каждый список должен быть уникальным и не может иметь дубликатов.

В приведенном выше примере с фреймом данных ожидаемый результат должен выглядеть примерно так:

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

Однако я получаю результаты типа:

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

Что является наиболее питоническимспособ сделать это? Вот моя жалкая попытка:

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)

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Помимо шага тасования, ваш вопрос очень похож на Как изменить порядок столбцов DataFrame? . Перемешивание может быть выполнено любым количеством способов в 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 голос
/ 28 октября 2019

Вы можете использовать numpy.random.shuffle, чтобы просто перетасовать индексы столбцов. Потому что из твоего вопроса, я полагаю, ты хочешь это сделать.

Пример:

import numpy as np

to_shuffle = np.array(df.columns)
np.random.shuffle(to_shuffle)
print(to_shuffle)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...