Найти общее количество профилей для распределения
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']