使用Pandas匹配DataFrame数据、统计疾病频次及解决代码报错
数据集关联、疾病统计及代码错误修复
一、患者与疾病数据集关联及Top5疾病统计
步骤1:关联两个数据集
用pandas的merge方法,通过ICD编码将患者数据集与疾病数据集关联,匹配对应疾病名称。假设患者数据集名为patients,疾病数据集名为diseases,患者表ICD编码列是icd_code,疾病表ICD编码列是icd_code、疾病名称列是disease_name,代码如下:
import pandas as pd # 关联数据集 joined = pd.merge(patients, diseases, on='icd_code')
注意:请替换为你实际数据表的列名
步骤2:分组统计疾病出现次数并取Top5
按ICD编码+疾病名称分组统计出现次数,再按次数降序排序取前5:
# 分组统计疾病出现次数 disease_counts = joined.groupby(['icd_code', 'disease_name']).size().reset_index(name='occurrence_count') # 降序排序取Top5 top5_diseases = disease_counts.sort_values(by='occurrence_count', ascending=False).head(5) # 输出结果 print(top5_diseases)
二、代码错误分析与修复
错误原因
你执行的代码:
avg2 = joined.groupby('disease_name').TIME_DELTA.mean().disease_name.value_counts()
joined.groupby('disease_name').TIME_DELTA.mean()返回的是一个Series对象——它的索引是disease_name,值是对应疾病的TIME_DELTA均值。这个Series没有disease_name属性,所以调用.disease_name.value_counts()会触发'Series' object has no attribute 'disease_name'错误。
修复方案
根据不同需求,有两种处理方式:
情况1:统计各疾病TIME_DELTA均值的分布(即不同均值对应的疾病数量)
先计算均值,再对均值结果做频次统计:
# 计算每个疾病的TIME_DELTA均值 mean_time_delta = joined.groupby('disease_name').TIME_DELTA.mean() # 统计不同均值对应的疾病数量 avg2 = mean_time_delta.value_counts()
情况2:同时获取每个疾病的TIME_DELTA均值和出现次数(更常用的需求)
用agg方法一次性聚合多个统计指标:
# 分组聚合,计算均值和出现次数 disease_stats = joined.groupby('disease_name').agg( avg_time_delta=('TIME_DELTA', 'mean'), occurrence_count=('disease_name', 'size') ).sort_values(by='occurrence_count', ascending=False) # 输出结果 print(disease_stats)
内容的提问来源于stack exchange,提问作者Aayush Kaushal
相关产品推荐
相关产品推荐

