使用python和pandas向用户分发x个事件

时间:2018-06-29 13:00:51

标签: python pandas

我有一个像这样的数据框:

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

,然后我有1000个配置文件池。将EVENT A分配给配置文件的20%,将EVENT b分配给配置文件的30%的最有效方法是什么。每个配置文件只能分配一个事件。

我的问题实际上更大。我有大量的配置文件,有些事件只能分配给某些配置文件(基于外键),但是我仅在分配上述数据时遇到了问题,因为我只在公共列上使用merge来查找合适的配置文件

2 个答案:

答案 0 :(得分:0)

您可以使用numpy

轻松完成此操作
probs = df.percent / df.percent.sum()
np.random.choice(df.event_name, size=profiles.shape[0], p=probs)

代码未经测试,但可以正常工作。

答案 1 :(得分:0)

找到要分配的配置文件总数

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']