如何从字典中创建一个新列,该列的值是集合的键?

2024-06-01 04:14:14 发布

您现在位置:Python中文网/ 问答频道 /正文

这是主数据帧的子集。下面的字典中列出了所有列

age_groups_type procedureschoice=aortic_valve_repair    procedureschoice=arterial_switch
0   Pediatrics  False                                   True
1   Pediatrics  False                                   True
2   Pediatrics  False                                   True
3   Adults      True                                    False
4   Adults      True                                    False
5   Pediatrics  False                                   True
6   Adults      True                                    False
7   Pediatrics  False                                   True
8   Adults      True                                    False
9   Pediatrics  False                                   True

本词典包含每个手术的类别,无论是“主动脉”、“二尖瓣”。等等,以及他们相应的age_group_type,无论是“成人”还是“儿科”(儿童)

{'Adults': {'Aortic': {'procedureschoice=aortic_valve_repair',
   'procedureschoice=arch_replacement',
   'procedureschoice=ascending_aortic_replacement',
   'procedureschoice=avrmechanical',
   'procedureschoice=avrstented_bioprosthesis',
   'procedureschoice=bentall',
   'procedureschoice=freestyle',
   'procedureschoice=homograft_aortic_root_replacement',
   'procedureschoice=ross',
   'procedureschoice=valve-sparing_aortic_root_replacement'},
  'Mitral': {'procedureschoice=mitral_valve_repair',
   'procedureschoice=mvrmechanical',
   'procedureschoice=mvrstented_bioprosthesis'},
  'Tricuspid': {'procedureschoice=tricuspid_valve_repair',
   'procedureschoice=tvrmechanical',
   'procedureschoice=tvrstented_bioprosthesis'},
  'CABG': {'procedureschoice=cabg'},
  'Myectomy': {'procedureschoice=myectomy'},
  'GUCH': {'procedureschoice=alcapa_repair',
   'procedureschoice=arterial_switch',
   'procedureschoice=asd_closure',
   'procedureschoice=atrial_septectomy',
   'procedureschoice=atrial_switchmustard',
   'procedureschoice=av_canal_repairpartial',
   'procedureschoice=av_canal_repairtransitional',
   'procedureschoice=central_shunt',
   'procedureschoice=coarctectomy_with_extended_end-to-end_anastomosis',
   'procedureschoice=cor-triatriatum_repair',
   'procedureschoice=coronary_av_fistula_repair',
   'procedureschoice=extra-anatomical_bypass_of_coa',
   'procedureschoice=fallot_repair',
   'procedureschoice=fontan',
   'procedureschoice=glenn',
   'procedureschoice=lpa_reconstruction',
   'procedureschoice=mbt_shunt',
   'procedureschoice=mpa_reconstruction',
   'procedureschoice=pa_banding',
   'procedureschoice=papvc_repair',
   'procedureschoice=pda_closure',
   'procedureschoice=pulmonary_trans-annular_patch',
   'procedureschoice=pulmonary_valve_replacementfreestyle',
   'procedureschoice=pulmonary_valve_replacementhomograft',
   'procedureschoice=pulmonary_valve_replacementstented_bioprosthesis',
   'procedureschoice=pulmonary_valvotomy',
   'procedureschoice=rastelli',
   'procedureschoice=relief_of_rvoto',
   'procedureschoice=resection_of_subaortic_membrane',
   'procedureschoice=rpa_reconstruction',
   'procedureschoice=rupture_sinus_of_valsalva_repair',
   'procedureschoice=rvot_patch',
   'procedureschoice=supravalvular_as_repair',
   'procedureschoice=vascular_ring_repair',
   'procedureschoice=vsd_closure'}},
 'Pediatrics': {'VSD': {'procedureschoice=vsd_closure'},
  'TGA': {'procedureschoice=arterial_switch',
   'procedureschoice=atrial_switchmustard',
   'procedureschoice=rastelli'},
  'Arch': {'procedureschoice=arch_repair',
   'procedureschoice=coarctectomy_with_extended_end-to-end_anastomosis',
   'procedureschoice=extra-anatomical_bypass_of_coa'},
  'Canal': {'procedureschoice=av_canal_repaircomplete',
   'procedureschoice=av_canal_repairpartial',
   'procedureschoice=av_canal_repairtransitional'},
  'Valvular': {'procedureschoice=aortic_valve_repair',
   'procedureschoice=avrmechanical',
   'procedureschoice=avrstented_bioprosthesis',
   'procedureschoice=bentall',
   'procedureschoice=freestyle',
   'procedureschoice=homograft_aortic_root_replacement',
   'procedureschoice=maze_procedure',
   'procedureschoice=mitral_valve_repair',
   'procedureschoice=mvrmechanical',
   'procedureschoice=mvrstented_bioprosthesis',
   'procedureschoice=ross',
   'procedureschoice=tricuspid_valve_repair',
   'procedureschoice=tvrmechanical',
   'procedureschoice=tvrstented_bioprosthesis',
   'procedureschoice=valve-sparing_aortic_root_replacement'},
  'RVOT_PA': {'procedureschoice=fallot_repair',
   'procedureschoice=lpa_reconstruction',
   'procedureschoice=mpa_reconstruction',
   'procedureschoice=pulmonary_trans-annular_patch',
   'procedureschoice=pulmonary_valve_replacementfreestyle',
   'procedureschoice=pulmonary_valve_replacementhomograft',
   'procedureschoice=pulmonary_valve_replacementstented_bioprosthesis',
   'procedureschoice=pulmonary_valvotomy',
   'procedureschoice=relief_of_rvoto',
   'procedureschoice=rpa_reconstruction',
   'procedureschoice=rvot_patch'},
  'Palliative': {'procedureschoice=atrial_septectomy',
   'procedureschoice=central_shunt',
   'procedureschoice=dks',
   'procedureschoice=first_stage_switchpab,_bts',
   'procedureschoice=fontan',
   'procedureschoice=glenn',
   'procedureschoice=mbt_shunt',
   'procedureschoice=pa_banding'}}}

我需要的是创建一个新的列procedure_group,其中为成人患者填充字典键['Aortic', 'Mitral', 'Tricuspid', 'CABG', 'Myectomy', 'GUCH'],为儿童患者填充字典键['VSD', 'TGA', 'Arch', 'Canal', 'Valvular', 'RVOT_PA', 'Palliative']。 我试过这个

def code_map(row):
    for key in code.keys():
        for i in code[key].keys():
            for k in list(code[key][i]):
                if row[row['age_groups_type'] == 'Adults' & row[k] == True]:
                    return i
                elif row[row['age_groups_type'] == 'Pediatrics' & row[k] == True]:
                    return i
df['procedure_group'] = df.apply(code_map, axis=1)

还有这个

def code_map(df):
    for col in df:
        for i in range(len(adult_list)):
            if code["Adults"][i][col] == True:
                return code["Adults"][i]
        for i in range(len(pediatrics_list)):
            if code["Pediatrics"][i][col] == True:
                return code["Pediatrics"][i]
df['procedure_group'] = df.apply(code_map(df), axis=1)

和其他解决方案,但所有试验都失败了

最终输出将如下所示

age_groups_type procedureschoice=aortic_valve_repair    procedureschoice=arterial_switch       procedure_group
0   Pediatrics  False                                   True               TGA
1   Pediatrics  True                                    False              Aortic
2   Pediatrics  False                                   True               TGA
3   Adults      True                                    False              Aortic
4   Adults      True                                    False              Aortic
5   Pediatrics  False                                   True               TGA
6   Adults      True                                    False              Aortic
7   Pediatrics  False                                   True               TGA
8   Adults      True                                    False              Aortic
9   Pediatrics  False                                   True               TGA

我考虑的逻辑是,如果在每一行中,程序是True,并且患者是成年人,则返回对应于这一行的字典值。 我该怎么做


Tags: falsetruedfcoderowrepairpediatricsvalve