У меня есть фрейм данных с 3 уровнями:
- index "users_A"
- index "users_B"
- оценка, целое число для каждого (user_a x user_b )
Мы не можем приписать user_B к user_A, если счет равен 0
Идея состоит в том, чтобы отбросить дублированный user_b, чтобы создать раздел всех user_b, где мы максимизируем минимальное количество user_b приписывается user_a. Оценка должна быть критерием принятия решения, но есть много дубликатов, и я в итоге не могу найти user_b для моих последних пользователей.
Пример: здесь, из ввода набора данных, я хочу, чтобы функция получала набор данных вывод
import pandas as pd
import random
#This code will generate a dataframe similar to mine
users_A = [0, 1, 2]
users_B = ['a','b','c','d','e','f']
input = pd.DataFrame(index=pd.MultiIndex.from_product([users_A, users_B], names=['users_A', 'users_B']))
input["scores"] = pd.Series([random.randrange(0, 11) for i in range(18)] , index=pd.MultiIndex.from_product([users_A, users_B]))
input = input[input.scores %2 !=0 ]
print(input)
>>>
scores
users_A users_B
0 a 7
b 7
d 7
1 a 9
b 3
e 5
f 5
2 a 1
b 1
c 1
e 3
f 7
Из этого ввода я хочу вывод без дубликата, где каждый пользователь user_A получает как минимум 2 user_B, потому что это возможно, и для максимизации суммы баллов на пользователя user_A
Вывод :
>>>
scores
users_A users_B
0 a 7
d 7
1 b 3
e 5
2 c 1
f 7
(я максимизировал сумму на одну руку, возможно, это не оптимальное решение, но показывает, какой тип раздела я хочу)
Есть какие-нибудь подсказки, как решить эту проблему? ? Я вижу решение, в котором я вычисляю все возможные разделы и после этого выбираю наиболее сбалансированные, но у меня большой пул пользователей, и я хочу развернуть это - для внутреннего инструментария, но он должен вычислять res в считанные секунды ...
Спасибо !!!