Ограничение венгерского алгоритма с использованием Python

#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