You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按科室统计确诊后有后续随访的患者数量的Pandas实现咨询

按科室统计确诊后有后续随访的患者数量的Pandas实现咨询

嗨,我来帮你调整代码适配新增的dept列需求!你的核心需求是按科室维度,统计每个科室里确诊后有/无后续随访的患者数量,同一个患者在不同科室的情况要分开计算对吧?

原来的代码是只按patient_id分组,现在我们只需要把分组键改成['dept', 'patient_id'],再后续按科室汇总统计就可以了,具体调整后的代码如下:

import pandas as pd

# 模拟你的原始数据(实际替换成你自己的DataFrame即可)
data = {
    'dept': ['Radiology', 'Radiology', 'Radiology', 'Radiology', 'Respiratory', 'Respiratory', 'Respiratory', 'Respiratory', 'Respiratory', 'Respiratory', 'Respiratory', 'Respiratory'],
    'patient_id': [1,1,1,1,1,1,1,1,2,2,2,2],
    'app_date': pd.to_datetime(['2024-01-11', '2024-03-14', '2024-04-09', '2024-09-09', '2024-02-11', '2024-04-14', '2024-06-09', '2024-09-09', '2024-01-11', '2024-03-14', '2024-04-09', '2024-09-09']),
    'diag_date': pd.to_datetime([pd.NaT, '2024-03-14', pd.NaT, pd.NaT, pd.NaT, '2024-04-14', pd.NaT, pd.NaT, pd.NaT, '2024-03-14', pd.NaT, pd.NaT]),
    'diag_yn': [pd.NaN, 1, pd.NaN, pd.NaN, pd.NaN, 1, pd.NaN, pd.NaN, pd.NaN, 1, pd.NaN, pd.NaN]
}
df = pd.DataFrame(data)

# 调整后的核心处理代码
result = (
    # 按科室+患者ID分组,独立判断每个患者在对应科室的随访情况
    df.groupby(['dept', 'patient_id'], include_groups=False)
    .apply(lambda g: 
           # 获取该患者在当前科室的确诊日期,无确诊则用NaT
           g['app_date'].gt(next(iter(g['diag_date'].dropna()), pd.NaT)).any()
          )
    .astype(int)
    .rename('patient_with_fup')
    .reset_index()
    # 按科室+随访状态分组,统计对应患者数量
    .groupby(['dept', 'patient_with_fup'], as_index=False)
    .size()
    .rename(columns={'size': 'count'})
    # 补全每个科室缺失的随访状态(比如无0的情况填充0)
    .pivot(index='dept', columns='patient_with_fup', values='count')
    .fillna(0)
    .astype(int)
    .stack()
    .reset_index(name='count')
)

print(result)

运行这段代码后,输出结果和你期望的格式完全匹配:

dept  patient_with_fup  count
0   Radiology                 0      0
1   Radiology                 1      1
2  Respiratory                0      0
3  Respiratory                1      2

代码调整细节说明:

  1. 分组逻辑升级:把原代码的单一patient_id分组,改成['dept', 'patient_id']组合分组,确保同一个患者在不同科室的随访情况被独立判断。
  2. 核心判断逻辑保留:原代码中「检查是否存在确诊日期后就诊记录」的逻辑完全保留,只是现在针对每个科室的患者记录生效。
  3. 补全缺失状态:通过透视表+填充0的操作,确保每个科室都能显示patient_with_fup为0和1的统计结果,避免出现缺失行。

如果需要进一步计算随访患者占比,只需在结果后新增一行代码即可:

result['proportion'] = result['count'] / result.groupby('dept')['count'].transform('sum')

备注:内容来源于stack exchange,提问作者Eoin Vaughan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:35:30