【问题标题】:I want to create new dataframe columns looping over rows of a specific column我想创建循环遍历特定列的行的新数据框列
【发布时间】:2019-01-21 11:36:07
【问题描述】:

我正在尝试在 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 位医生和医院,这将变得不可能,必须有更好的方法...... 这与医生 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()

提前谢谢你!

【问题讨论】:

  • 您应该将数据框插入为文本而不是图像,以便有人可以复制数据以进行处理。 print(doctors_sorted_by_preference) 的结果应该足够了。

标签: python pandas function loops dataframe


【解决方案1】:

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

为了方便查看,我将数据框命名为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()

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 2021-03-31
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    相关资源
    最近更新 更多