распределить x количество событий пользователям, использующим python и pandas - PullRequest
0 голосов
/ 29 июня 2018

У меня есть датафрейм, который выглядит примерно так:

event_name, percent
A, 20%
B, 30%
C, 20%
D, 30%

и тогда у меня есть пул из 1000 профилей. Какой самый эффективный способ назначить СОБЫТИЕ А для 20% профилей, СОБЫТИЕ В для 30% профилей. Каждому профилю может быть назначено только одно событие.

Моя проблема на самом деле немного больше. У меня большой пул профилей, и некоторые события могут быть назначены только определенному профилю (на основе внешнего ключа), но у меня проблема только с распространением указанных выше данных, для нахождения только подходящих профилей, которые я использую, объединить в общем столбце

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Найти общее количество профилей для распределения

n = profiles.shape[0]

Найти вероятности для каждого события

df['probs'] = df['percent']/df['percent'].sum()

Затем для каждого события создайте список с соответствующим количеством профилей

dict_values = df.to_dict(orient='list')
all_events = [[el[0]] * int(el[1] * n) for el in zip(dict_values['event_name'], dict_values['probs'])]

Теперь выровняйте список и перемешайте, чтобы получить случайное распределение для событий

from random import shuffle
all_events = [item for sublist in all_events for item in sublist]
shuffle(all_events)

Для 10 профилей и двух событий вы получите что-то вроде этого

['A', 'B', 'B', 'B', 'A', 'A', 'A', 'B', 'B', 'B']
0 голосов
/ 29 июня 2018

Вы можете сделать это легко с numpy

probs = df.percent / df.percent.sum()
np.random.choice(df.event_name, size=profiles.shape[0], p=probs)

Код не проверен, но должен работать.

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