如何为列表中包含值的每个分类添加列
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
我有 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