我的一行数据有18列,每列都有一个复杂的代码。你知道吗
并发症类由“name”组成,name是并发症的名称,如“HeartFailure”,它还有一个字符串数组,存储为“codes”,其值为“500”,需要为每个患者(final的每一行)匹配18列,并查找代码,如“5001”或“5002”。如果找到了代码,则需要将数据集中相应的complexity列更新为1。你知道吗
这就是我编写的解决方案。你认为这可以更优化吗?目前,仅在25000名患者身上运行大约需要16分钟,这还不够好。你知道吗
数据:
DX1 DX2 DX3 DX4 HeartFailure
10R46 R*1005 8017 2 0
10R46 R*10335 5019 2 0
100R91 R*1005 8017 1 0
10R91 R*243 8870 1 0
10M95 R*4918 8305 3 0
10M95 R*9017 8305 3 0
10M95 R*9470 8221 3 0
班级:
class HCUPCodes:
def __init__(self,name,codes):
self.name = name
self.codes = codes
类的初始化:
complications_POA = []
complications_POA.append(HCUPCodes('HeartFailure',['80', 'R*1']))
代码:
def defineComplicationsFeatures(patient, comp_list):
for i in range(len(comp_list)):
for x in comp_list[i].codes:
if((any(patient.str.startswith(x,na=False)))):
patient[comp_list[i].name]=1 #change 0 to 1 in the corresponding disease column for this patient
return patient
final = final.apply(defineComplicationsFeatures, axis=1, comp_list = complications_POA)
final = final.apply(defineComplicationsFeatures, axis=1, comp_list = complications_NOPOA)
输出:
DX1 DX2 DX3 DX4 HeartFailure
10R46 R*1005 8017 2 1
10R46 R*10335 5019 2 1
100R91 R*1005 8017 1 1
10R91 R*243 8870 1 0
10M95 R*4918 8305 3 0
10M95 R*9017 8305 3 0
10M95 R*9470 8221 3 0
要获得最低的速度,可以在找到代码后添加
break
:有两件事让你的代码慢了下来:
.apply
与自己定义的函数一起使用。你知道吗您可以使用
pandas
和numpys
的矢量化方法优化您的解决方案:解决方案:(在这种情况下我没有使用你的类)
注意 您可以将
col_to_update
&;strings_to_search
转换为函数的参数,这使函数更简洁,为了简单起见,我现在选择不这样做。你知道吗相关问题 更多 >
编程相关推荐