如何使用Pandas提取患者治疗drug_code序列并量化治疗模式
问题:统计患者用药序列模式及频次
尽管所有患者因同一疾病入院治疗,但基于个体当前状况,其治疗序列略有差异。我们的目标是收集所有治疗序列并量化这些模式,现求助用Pandas实现该需求。
当前数据集
import pandas as pd # 修正原数据集中的语法错误('patient'键缺失闭合引号) df2 = pd.DataFrame({ 'patient': ['one', 'one', 'one', 'two','two', 'two','three','three', 'three'], 'drug_code': ['011', '012', '013', '012', '013', '011','011', '012', '013'], 'date': ['11/20/2022', '11/22/2022', '11/23/2022', '11/8/2022', '11/9/2022', '11/14/2022','11/8/2022', '11/9/2022', '11/14/2022'] }) df2['date'] = pd.to_datetime(df2['date'])
期望结果
code_patterns = pd.DataFrame({ 'pattern':['011-012-013','012-013-011'], 'frequency': [2,1] })
解决方案
实现步骤
- 按患者分组,对每个患者的记录按日期排序,确保用药顺序符合时间先后
- 将每个患者的
drug_code按顺序拼接成以-分隔的字符串 - 统计每个拼接字符串的出现频次
- 转换为目标格式的DataFrame
代码实现
# 按患者分组,排序后拼接用药编码 patient_patterns = df2.sort_values(['patient', 'date'])\ .groupby('patient')['drug_code']\ .apply(lambda x: '-'.join(x)) # 统计频次并转换为目标结构 code_patterns = patient_patterns.value_counts()\ .reset_index()\ .rename(columns={'drug_code': 'pattern', 'count': 'frequency'}) # 输出结果 print(code_patterns)
代码说明
sort_values(['patient', 'date']):保证每个患者的用药记录按时间顺序排列groupby('patient')['drug_code'].apply(lambda x: '-'.join(x)):为每个患者生成唯一的用药序列字符串value_counts():自动统计各序列的出现次数,reset_index()和rename()将结果调整为目标格式
内容的提问来源于stack exchange,提问作者Murali
相关产品推荐
相关产品推荐

