Добавить новые категории и заменить в столбцах - PullRequest
0 голосов
/ 25 апреля 2020

Я работаю с большим набором данных и пытаюсь перегруппировать некоторые столбцы на основе кодов ICD10 (медицинские коды, https://www.icd10data.com/ICD10CM/Codes). Однако, поскольку я хочу уделить особое внимание некоторым кодам (codes_to_replace), я хочу дать им другую категорию. Поэтому я сделал следующий код, применив bisect_left и добавив 7 дополнительных категорий («SSS», «TTT», «UUU», «VVV», «WWW», «XXX», «YYY»). Код работает, но когда я делаю подсчет, чтобы проверить, соответствует ли он исходному количеству кодов, это не так. Например, теперь у меня есть 1814 кодов «E785», то есть 1814 кодов «TTT», однако после этого соответствующая категория (22) не имеет значений. Другим примером является код «F17210», который я заменил на «XXX», и их 370, после запуска этого кода (и новой категории «26») их 455. Это не имеет смысла.

# The first 3 values are the only that matters
diagnoses_sec.fillna("ZZZ", inplace=True)
codes_to_replace = ["I10", "E785", "E663", "E669", "E119", "F17210", "Z9221"]
new_replace = ["SSS", "TTT", "UUU", "VVV", "WWW", "XXX", "YYY"]

# It will replace the target codes by other special code
for i in range(0,len(codes_to_replace)):
    diagnoses_sec = diagnoses_sec.replace(to_replace = codes_to_replace[i], value = new_replace[i])

diagnoses_sec = diagnoses_sec.apply(lambda x: x.str.slice(start=0, stop=3, step=1))

from bisect import bisect_left

diag_icd10_ranges = ["B99","D49","D89","E89","F99","G99","H59","H95",
          "I99","J99","K95", "L99", "M99", "N99","O9A","P96","Q99",
          "R99","T88","Y99","Z99", "SSS", "TTT", "UUU", "VVV", "WWW", "XXX", "YYY", "ZZZ"]

diag_icd10_dict = {0: 'infectious_icd10d', 1: 'neoplasms_icd10d', 2: 'blood_icd10d', 3: 'endocrine_icd10d',
                   4: 'mental_icd10d', 5: 'nervous_icd10d', 6: 'eye_icd10d', 7: 'ear_icd10d',
                   8: 'circulatory_icd10d', 9: 'respiratory_icd10d', 10: 'digestive_icd10d', 11: 'skin_icd10d', 
                  12: 'musculo_icd10d', 13: 'genitourinary_icd10d', 14: 'pregnancy_icd10d', 15: 'perinatalperiod_icd10d', 
                  16: 'congenital_icd10d',
                  17: 'abnormalfindings_icd10d', 18:'injury_icd10d', 19:'morbidity', 20:'healthstatus', 21:'special_1',
                  22: 'special_2', 23:'special_3', 24:'special_4', 25:'special_5',
                  26: 'special_6', 27:'special_7', 28:'Nan_Category'}

# function to categorize every patient
def icdGroup(code): return bisect_left(diag_icd10_ranges,code)

# loop for the categorisation (in number) of every patient of every diagnose
diagnoses_sec = diagnoses_sec.applymap(icdGroup)

Кто-нибудь может мне помочь? Я что-то делаю не так?

...