Python: сгруппировать и объединить> добавление к оригинальному df - PullRequest
1 голос
/ 24 января 2020

У меня есть фрейм данных с категориальной переменной, где размеры групп меняются. В каждой группе категориальной переменной я хочу назначить случайное число от 1 до 10. Я создаю столько случайных чисел от 1 до 10, сколько записей в определенной группе c. Чтобы назначить случайное число, я сделал простую функцию под названием createrandomnum.

Затем я использовал эту строку кода:

grouped_vales = data.groupby("categories").categories.agg(newnumber = createrandomnum)

Тогда выводом является фрейм данных, где каждая строка представляет категорию. Столбец с именем 'newnumber' содержит списки с номерами от 1 до 10. Длина списка соответствует размерам групп в исходном фрейме данных.

Я хотел бы добавить эти числа в свой исходный фрейм данных. То, какой номер выделен, какой записи не так важно, если категория одна и та же.

Я подумал, что мне, вероятно, придется отсортировать исходный фрейм данных;

data.sort_values("categories")

Но тогда ...

Кто-нибудь может мне помочь? Заранее спасибо!

PS Я только начал изучать Python, так что, возможно, приведенный здесь код не самый эффективный. Советы приветствуются, конечно:)

Ответы [ 2 ]

1 голос
/ 24 января 2020

Добавлен метод добавления случайного числа:

import random    
data['new'] = data.groupby('categories')['categories'].transform(lambda group: random.randint(1,10))
1 голос
/ 24 января 2020

Я полагаю, что вы можете использовать функцию GroupBy.transform для возврата нового столбца (серии) с таким же размером, как у оригинала DataFrame:

data['new'] = data.groupby("categories").categories.transform(createrandomnum)
...