采用后续日期值检查条件后进行多个分组和聚合

问题描述 投票:0回答:1

我有一个数据框,我想返回跨部门诊断疾病后进行后续随访的患者数量(比例)。

示例;患者可以跨多个科室进行

diag_yn
,但我想检查患者是否像以前一样对每个科室进行了随访。

因此,例如,患者 1 将被记录两次,放射科各记录一次,呼吸科各记录一次,因为两个科室都有后续预约。

原DF

dept         | patient_id | app_date   | diag_date  | diag_yn   |
|------------|------------|------------|------------|-----------|
Radiology    | 1          | 2024-01-11 | NaT        | NaN       |
Radiology    | 1          | 2024-03-14 | 2024-03-14 | 1         |
Radiology    | 1          | 2024-04-09 | NaT        | NaN       |
Radiology    | 1          | 2024-09-09 | NaT        | NaN       |
Respiratory  | 1          | 2024-02-11 | NaT        | NaN       |
Respiratory  | 1          | 2024-04-14 | 2024-04-14 | 1         |
Respiratory  | 1          | 2024-06-09 | NaT        | NaN       |
Respiratory  | 1          | 2024-09-09 | NaT        | NaN       |
Respiratory  | 2          | 2024-01-11 | NaT        | NaN       |
Respiratory  | 2          | 2024-03-14 | 2024-03-14 | 1         |
Respiratory  | 2          | 2024-04-09 | NaT        | NaN       |
Respiratory  | 2          | 2024-09-09 | NaT        | NaN       |

所需输出

dept        | patient_with_fup | count |
Radiology   |------------------|-------|
            | 1                | 1     |
            | 0                | 0     |
Respiratory |------------------|-------|
            | 1                | 2     |
            | 0                | 0     |

已提供以下代码,但在

dept
列添加到 DF 之前。

 (df.groupby('patient_id')
   .apply(lambda g: g['app_date'].gt(next(iter(g['diag_date'].dropna()),
                                          pd.NaT)).any(),
          include_groups=False)
   .astype(int).value_counts()
   .reindex([0, 1], fill_value=0).rename_axis('fup_yn')
   .reset_index()
)
python-3.x pandas dataframe
1个回答
0
投票

不知道我是否理解正确,但你可以尝试这样的事情:

def check_follow_up(g):
    diag_date = g['diag_date'].dropna().max()
    if pd.isna(diag_date):
        return 0
    return int((g['app_date'] > diag_date).any())

result = (df.groupby(['dept', 'patient_id'])
      .apply(check_follow_up)
      .reset_index(name='patient_follow_up')
      .groupby(['dept', 'patient_follow_up'])
      .size()
      .reset_index(name='count')
)

这应该按患者 ID 和科室对其进行分组,如果有效请告诉我

© www.soinside.com 2019 - 2024. All rights reserved.