#python #pandas #algorithm #hungarian-algorithm
#python #pandas #алгоритм #венгерский-алгоритм
Вопрос:
У меня есть фрейм данных job и employee, с продолжительностью, которую каждый сотрудник может выполнить для каждой работы. Я хочу использовать венгерский алгоритм для назначения каждого задания 1 сотруднику, и каждому сотруднику может быть назначено только 1 задание.
Вот данные:
J1 J2 J3
E1 3 5 2
E2 7 3 9
E3 4 2 7
E4 2 7 5
E5 6 8 8
Ожидаемый результат был:
J1 J2 J3
E1 0 0 1
E2 0 0 0
E3 0 1 0
E4 1 0 0
E5 0 0 0
А затем распечатайте это:
Job Employee
1 4
2 3
3 1
Кто-нибудь может мне помочь в этом вопросе? Заранее спасибо!
Ответ №1:
Предполагая df
, что входной фрейм данных, вы можете использовать scipy.optimize.linear_sum_assignment
:
from scipy.optimize import linear_sum_assignment
x,y = linear_sum_assignment(df)
out = pd.DataFrame({'Job': df.columns[y], 'Employee': df.index[x]})
вывод:
Job Employee
0 J3 E1
1 J2 E3
2 J1 E4