У меня есть DataFrame списков, и я хотел бы выбрать 6 случайных элементов из списка в строке, каждый выбранный элемент должен быть сохранен в той же строке, но в другом столбце.

DataFrame :

id  column_with_lists
1   ['10A','11B','12C','13D','14E','15F','16G','17H','18I']
2   ['34X','35Y','46Z','48A','49B','50C','51D']
3   ['232H', '23Q', '26W', '89D', '328A', '219C', '432G', '324A']

Желаемый результат:

id  col     col1    col2     col3   col4    col5
1   '10A'   '14E'   '11B'   '18I'   '17H'   '13D'
2   '46Z'   '48A'   '49B'   '50C'   '51D'   '34X'
3   '232H'  '26W'   '89D'   '328A'  '432G'  '324A'

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

Я думал о чем-то вроде: ['col'] = df.apply( lambda x: random.sample( x['column_with_lists'], 1), axis=1), но для нескольких столбцов.

0
jonas 10 Фев 2021 в 01:01

2 ответа

Лучший ответ

Я решил свою проблему, преобразовав мои column_with_lists в список и перетасовывая элементы в подсписках. После этого я присоединяю его обратно к своему DataFrame.

import random 

def shuffle_list(var):
    for i in var:
        random.shuffle(i)
    return var

col_list= [item[:6] for item in shuffle_list(col_list)]
1
jonas 11 Фев 2021 в 17:54

Если ваши данные находятся в нескольких массивах, вы можете сделать что-то вроде этого:

import random

data = {
    array1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'],
    array2 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'],
    array3 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

output = {[],[],[]}

i = 0
for array in data:
    j = 0
    while j < 6:
        output[i].append(random.choice(array))
        j += 1
    i = 0

# POSSIBLE OUTPUT
output = {
    ['a', 'c', 'f', 'd', 'a', 'b'],
    ['g', 'a', 'b', 'f', 'g', 'c'],
    ['c', 'c', 'a', 'g', 'b', 'f']

Если вы не хотите повторений, вы можете проверить, добавлено ли значение в выходной массив, и не добавлять его, если оно уже есть.

0
fingerbirdy 9 Фев 2021 в 22:11