Python 我想创建新的dataframe列,在特定列的行上循环

Python 我想创建新的dataframe列,在特定列的行上循环,python,pandas,function,loops,dataframe,Python,Pandas,Function,Loops,Dataframe,我正在尝试用Python创建一个Gale-Shapley算法,它提供医生和医院的稳定匹配。为了做到这一点,我给了每一位医生和每一家医院一个由数字表示的随机偏好 由首选项组成的数据帧 之后,我创建了一个函数,该函数为每个医院的一位特定医生(由ID表示)评分,然后对该评分进行排序,创建两个新列。在对匹配进行评级时,我采用了偏好之间差异的绝对值,其中绝对值越低,匹配效果越好。这是第一位医生的配方: doctors_sorted_by_preference['Rating of Hospital

我正在尝试用Python创建一个Gale-Shapley算法,它提供医生和医院的稳定匹配。为了做到这一点,我给了每一位医生和每一家医院一个由数字表示的随机偏好

由首选项组成的数据帧

之后,我创建了一个函数,该函数为每个医院的一位特定医生(由ID表示)评分,然后对该评分进行排序,创建两个新列。在对匹配进行评级时,我采用了偏好之间差异的绝对值,其中绝对值越低,匹配效果越好。这是第一位医生的配方:

  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()
由此得出下表: 由偏好和评级+医生排名组成的数据框架

因此,1号医生比排名中的所有其他医院更喜欢第一家医院

现在我想通过创建一个循环(为每个医生创建两个新列并将它们添加到我的数据帧)为每个不同的医生重复这个函数,但我不知道如何做到这一点。我可以为所有10个不同的医生输入相同的函数,但是如果我将数据集增加到包括1000个医生和医院,这将是不可能的,一定有更好的方法。。。 这与doctor 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()

提前谢谢你

您还可以将值附加到列表中,然后将其写入数据帧。如果有一个大的数据集,添加到列表中会更快

为了便于查看,我将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()

您应该将数据帧作为文本而不是图像插入,以便有人可以复制数据进行处理。
打印的结果(医生按偏好排序)
应该足够了。