如何使用Python在分组维度计算累计唯一值计数?
累计唯一就诊医院计算实现方法
核心逻辑
因为数据已经提前按client_id、date_of_encounter升序排序,我们只需要对同一客户的同一医院首次出现的记录做标记,再对标记按客户分组累加,即可得到截至当前日期的累计唯一医院数量。
操作步骤
- 第一步:生成首次就诊标记
调用duplicated()方法识别同一客户同一医院的重复记录,取反得到首次就诊标记:首次出现为True(对应数值1),重复出现为False(对应数值0) - 第二步:按客户分组累加标记值
对标记列按client_id分组后调用cumsum()累加,直接得到目标列hospital_count
代码示例
# 方法1:分步实现,可读性更高 # 生成首次就诊标记列 df['first_visit'] = ~df.duplicated(subset=['client_id', 'hospital_id']) # 分组累加得到累计唯一医院数 df['hospital_count'] = df.groupby('client_id')['first_visit'].cumsum() # 删除中间标记列(可选) df.drop(columns='first_visit', inplace=True) # 方法2:单行实现,无需生成中间列 df['hospital_count'] = (~df.duplicated(['client_id', 'hospital_id'])).groupby(df['client_id']).cumsum()
效果验证
如果你的输入数据是如下结构:
| record_id | client_id | date_of_encounter | hospital_id |
|---|---|---|---|
| 1 | 1001 | 2023-01-01 | H001 |
| 2 | 1001 | 2023-01-15 | H002 |
| 3 | 1001 | 2023-02-01 | H001 |
| 4 | 1002 | 2023-01-05 | H001 |
输出的hospital_count列会是[1,2,2,1],完全符合累计唯一统计的要求。
内容的提问来源于stack exchange,提问作者Mazil_tov998
相关产品推荐
相关产品推荐

