标签:pandas dataframe loops python function
我正在尝试在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()
先感谢您!
解决方法:
您还可以将值附加到列表中,然后将其写入数据框.如果您的数据集很大,则追加到列表中会更快.
为了便于查看,我将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()
标签:pandas,dataframe,loops,python,function 来源: https://codeday.me/bug/20191211/2106768.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。