如何为列表中包含值的每个分类添加列

How to add column(s) for each classification that contains values in a list

我有 12 个分类,其中包含多个代码(在此示例中我只显示 2 个,痴呆症和实体瘤)

条件:代码
痴呆症:F01、F02、F03、F051、G30、G311
实体瘤:C77、C78、C79、C80

我希望能够为这 12 种情况中的每一种添加一列,并检查患者是否有任何特定情况的代码,如果有,输入 1,如果没有,则为该列输入 0。

patients = [('pat1', 'C77', 'F01', 'M32', 'M315'),
         ('pat2', 'I099', 'I278', 'M05', 'F01'),
         ('pat3', 'N057', 'N057', 'N058', 'N057')]
labels = ['patient_num', 'DIAGX1', 'DIAGX2', 'DIAGX3', 'DIAGX4']
df_patients = pd.DataFrame.from_records(patients, columns=labels)
df_patients

Input
patient_num DIAGX1  DIAGX2  DIAGX3  DIAGX4
pat1        C77     F01     M32     M315
pat2        I099    I278    M05     F01
pat3        N057    N057    N058    N057

Output
patient_num DIAGX1  DIAGX2  DIAGX3  DIAGX4  dementia_yn  tumour_yn
pat1        C77     F01     M32     M315    1            1
pat2        I099    I278    M05     F01     1            0
pat3        N057    N057    N058    N057    0            0

我在 np.select(conditions, values) 之前使用过代码来根据条件创建单个列,但如果能帮助我根据条件创建多个列,我将不胜感激。

您可以将 conditions/codes 存储在字典中,对其进行循环,然后使用 isin + any(axis=1) 检查每个条件的任何代码是否在每个条件的每一行中数据框:

all_codes = {
    'dementia': ['F01', 'F02', 'F03', 'F051', 'G30', 'G311'],
    'solid_tumour': ['C77', 'C78', 'C79', 'C80'],
}

for condition, codes in all_codes.items():
    df[condition + '_yn'] = df.isin(codes).any(axis=1).astype(int)

输出:

>>> df
  patient_num DIAGX1 DIAGX2 DIAGX3 DIAGX4  dementia_yn  solid_tumour_yn
0        pat1    C77    F01    M32   M315            1                1
1        pat2   I099   I278    M05    F01            1                0
2        pat3   N057   N057   N058   N057            0                0