仅拥有各医生的患者列表时如何匹配患者对应医生(Python代码优化)
患者-医生匹配的优化实现方案
核心思路是先将原始txt中的一对多医生-患者关系拆解为一对一映射表,再通过pandas的merge接口直接关联匹配,全程不需要手动写嵌套循环,同时可以避免原实现中字符串模糊匹配可能导致的ID误命中问题。
实现代码
第一步:解析txt生成一对一映射表
import pandas as pd # 读取原始医生记录txt,按冒号拆分为医生、患者字符串两列 doctors_raw = pd.read_csv("你的记录文件路径.txt", sep=":", header=None, names=["Doctor", "PatientsStr"]) # 拆分患者字符串为列表后展开为每行1个患者,得到精准的一对一映射关系 doc_pat_map = doctors_raw.assign( Patient = lambda x: x["PatientsStr"].str.split(",") ).explode("Patient") # 清理患者ID的多余空格,避免匹配失败 doc_pat_map["Patient"] = doc_pat_map["Patient"].str.strip()
第二步:关联匹配患者列表
如果一个患者仅对应一个医生,直接用左关联即可:
# 你的原始patientsDF需要包含Patient列存储所有唯一患者ID patientsDF = patientsDF.merge(doc_pat_map[["Doctor", "Patient"]], on="Patient", how="left")
如果存在一个患者对应多个医生的场景,可增加合并步骤:
patientsDF = doc_pat_map.groupby("Patient")["Doctor"].apply( lambda x: ",".join(x.dropna()) ).reset_index()
方案优势
- 代码量少,逻辑清晰,避免手动维护循环索引
- 采用精准匹配,不会出现原实现中
find方法把patient123和patient1234误判为匹配的问题 - 基于pandas矢量化操作实现,数据量较大时运行效率远高于嵌套循环
内容的提问来源于stack exchange,提问作者jecollinson
相关产品推荐
相关产品推荐

