Строка моих данных содержит 18 столбцов, каждый из которых имеет код сложности.
Класс сложности состоит из «имени», которое является именем сложности, такого как «HeartFailure», и у него также есть массив строк, хранящихся как «коды», которые имеют значения, такие как «500», и оно должно быть сопоставляются по 18 столбцам для каждого пациента (каждая строка финала) и находятся такие коды, как «5001» или «5002». Если код найден, то соответствующий столбец сложности в наборе данных необходимо обновить до 1.
Это было решение, которое я кодировал. Как вы думаете, это может быть более оптимизировано? Прямо сейчас требуется около 16 минут, чтобы запустить только 25000 пациентов, что просто недостаточно хорошо.
Данные:
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