我有一个像这样的数据框:
event_name, percent
A, 20%
B, 30%
C, 20%
D, 30%
,然后我有1000个配置文件池。将EVENT A分配给配置文件的20%,将EVENT b分配给配置文件的30%的最有效方法是什么。每个配置文件只能分配一个事件。
我的问题实际上更大。我有大量的配置文件,有些事件只能分配给某些配置文件(基于外键),但是我仅在分配上述数据时遇到了问题,因为我只在公共列上使用merge来查找合适的配置文件
答案 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']