Python如何从多列数据提取指定编码值并按诊断日期标记季度
可行实现方案
步骤1:批量筛选符合诊断规则的记录
不需要硬编码每个判断条件,先把需要匹配的「诊断类型+诊断编码」组合整理好,用向量化匹配完成筛选,适配数百万行的大规模数据,后续新增要匹配的编码只要调整目标编码集合即可,维护成本极低。
示例如下:
import pandas as pd import numpy as np # 提前把日期列转为datetime格式,仅需执行一次 diagnosis_df['diagnosis_date'] = pd.to_datetime(diagnosis_df['D列实际列名']) # 按ICD类型分别定义要筛选的编码集合,新增编码直接往对应集合加即可 icd10_target_codes = {'J280', 'J285', 'J2854', 'J1289', 'J129'} icd9_target_codes = {'478', '485', '490', '480'} # 筛选符合条件的记录生成新dataframe,该操作为向量化运算,处理百万行数据效率很高 filtered_df = diagnosis_df[ ((diagnosis_df['B列实际列名'] == 'ICD10') & diagnosis_df['C列实际列名'].isin(icd10_target_codes)) | ((diagnosis_df['B列实际列名'] == 'ICD9') & diagnosis_df['C列实际列名'].isin(icd9_target_codes)) ].copy()
步骤2:按自然季度生成标记列
直接用pandas内置的日期季度提取能力生成季度标识,再通过独热编码生成对应季度的1标记:
# 生成「年份+季度」标识,格式如2023Q1、2023Q2 filtered_df['quarter'] = filtered_df['diagnosis_date'].dt.to_period('Q').astype(str) # 生成季度标记列,对应诊断所在季度为1,其余为0 quarter_dummies = pd.get_dummies(filtered_df['quarter'], prefix='diagnose_q') final_df = pd.concat([filtered_df, quarter_dummies], axis=1)
如果需要把季度标记合并回原始全量数据集,按行索引把final_df的标记列merge回原数据集,空值填充为0即可。
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

