Я хочу создать новые столбцы DataFrame, зацикливание строк определенного столбца - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь создать алгоритм Гейла-Шепли в Python, который обеспечивает стабильные совпадения врачей и больниц.Для этого я дал каждому врачу и каждой больнице случайное предпочтение, представленное числом.

Фрейм данных, состоящий из предпочтений

enter image description here

Впоследствии я создал функцию, которая оценивает каждую больницу на одного конкретного врача (представленного идентификатором) с последующимпутем ранжирования этого рейтинга создавая две новые колонки.При оценке соответствия я взял абсолютное значение разницы между предпочтениями, где более низкое абсолютное значение является лучшим соответствием.Это формула для первого доктора:

  doctors_sorted_by_preference['Rating of Hospital by Doctor 1']=abs(doctors_sorted_by_preference['Preference Doctor'].iloc[0]-doctors_sorted_by_preference['Preference Hospital'])
    doctors_sorted_by_preference['Rank of Hospital by Doctor 1']=doctors_sorted_by_preference["Rating of Hospital by Doctor 1"].rank()

, которая приводит к следующей таблице: План данных, состоящий из предпочтений и рейтинга + рейтинг доктора

enter image description here

Следовательно, доктор 1 предпочитает первую больницу всем остальным больницам, представленным в рейтинге.

Теперь я хочу повторить эту функцию для каждого отдельного доктора, создав цикл (создавая два новых столбца для каждого доктора и добавляя их в мой массив данных), но я не знаю, как это сделать.Я мог бы напечатать одну и ту же функцию для всех 10 разных врачей, но если я увеличу набор данных до 1000 врачей и больниц, это станет невозможным, должен быть лучший способ ... Это была бы та же функция для доктора 2:

doctors_sorted_by_preference['Rating of Hospital by Doctor 2']=abs(doctors_sorted_by_preference['Preference Doctor'].iloc[1]-doctors_sorted_by_preference['Preference Hospital'])
    doctors_sorted_by_preference['Rank of Hospital by Doctor 2']=doctors_sorted_by_preference["Rating of Hospital by Doctor 2"].rank()

Заранее спасибо!

1 Ответ

0 голосов
/ 21 января 2019

Вы также можете добавить значения в список и затем записать его в dataframe.Добавление в списки будет быстрее, если у вас большой набор данных.

Я назвал в качестве фрейма данных df для просмотра:

for i in range(len(df['Preference Doctor'])):
    list1= []
    for j in df['Preference Hospital']:
         list1.append(abs(df['Preference Doctor'].iloc[i]-j))
    df['Rating of Hospital by Doctor_' +str(i+1)] = pd.DataFrame(list1)
    df['Rank of Hospital by Doctor_' +str(i+1)] = df['Rating of Hospital by Doctor_' 
                                                         +str(i+1)].rank()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...