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

Python按处方周期分组累计计数:统计approval前rejection次数

解决方案

核心思路

要统计每个处方申请流程(即单次approval前的所有rejection)的拒付次数,关键是先划分独立的流程批次,再在每个批次内统计拒付数,而非全局累计。

步骤1:数据排序与批次划分

先确保数据按患者、药品、时间排序,再用approval记录作为批次分隔符,将每个approval及其之前的rejection划分为同一个流程批次:

# 按患者、药品、日期升序排序,保证时间顺序正确
subset = subset.sort_values(['patient_id', 'drug', 'date'])

# 生成批次标识:每次approval之后的记录归为新批次
subset['batch'] = subset['claim_type'].eq('approval').shift(fill_value=False).cumsum()

步骤2:统计每个批次的拒付次数

在每个批次内统计rejection的总数,并合并回原数据:

# 统计每个批次的拒付次数
batch_reject_count = subset.groupby(['patient_id', 'drug', 'batch'])['claim_type'].apply(
    lambda x: x.eq('rejection').sum()
).reset_index(name='reject_count')

# 将拒付次数关联回原数据集
subset = subset.merge(batch_reject_count, on=['patient_id', 'drug', 'batch'], how='left')

步骤3:生成期望的cumcount字段

根据需求,给rejection标记该批次的总拒付数,给approval标记为1(代表该流程完成):

import numpy as np

subset['cumcount'] = np.where(subset['claim_type'] == 'rejection', subset['reject_count'], 1)

步骤4:去重(可选)

如果需要像期望结果那样,每个批次只保留一条rejection和一条approval(比如取每个批次中最早的记录):

# 按批次和类型分组,保留最早的记录
result = subset.sort_values('date').groupby(['patient_id', 'drug', 'batch', 'claim_type']).head(1)

执行后得到的结果与你期望的表格一致:

patient_iddateclaim_typedrugcumcount
pat_12022-07-20rejectiondrug_a2
pat_12022-07-22approvaldrug_a1
pat_12022-08-17rejectiondrug_a2
pat_12022-08-18approvaldrug_a1

后续关联需求实现

要提取rejection记录并关联首次拒付后7天内的approval,可以按批次提取关键日期后匹配:

# 提取每个批次的首次拒付日期和approval日期
batch_dates = subset.groupby(['patient_id', 'drug', 'batch']).agg(
    first_reject_date=('date', lambda x: x[subset['claim_type'] == 'rejection'].min()),
    approval_date=('date', lambda x: x[subset['claim_type'] == 'approval'].min())
).reset_index()

# 判断approval是否在首次拒付后7天内
batch_dates['within_7_days'] = (batch_dates['approval_date'] - batch_dates['first_reject_date']).dt.days <= 7

# 将关联结果合并到rejection记录中
rejections_with_approval = subset[subset['claim_type'] == 'rejection'].merge(
    batch_dates[['patient_id', 'drug', 'batch', 'approval_date', 'within_7_days']],
    on=['patient_id', 'drug', 'batch'],
    how='left'
)

内容的提问来源于stack exchange,提问作者gillygangles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:23:11