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

如何为按日期排序的groupby ID分组创建变量首次出现的指示列

问题解决方法

核心实现逻辑

按患者ID(CLIENT_ID)分组后,仅标记每个分组首次出现COUNSELLING_COUNT == 1的记录为1,其余记录全部标记为0。

完整实现代码

首先导入依赖库、生成测试数据集:

import pandas as pd
import numpy as np

# 生成测试数据集
data = {'CLIENT_ID':[54950,54950,54950,54950,54950,67777,67777,67777,70000,70000],
'DATE_ENCOUNTER':['2017-11-24','2018-01-19','2018-03-13','2018-05-11','2018-12-17','2015-09-01','2015-12-01','2016-02-28','2019-06-07','2019-08-09'],
'DATE_COUNSELLING':[np.nan,np.nan,np.nan,'2018-04-30','2018-06-25',np.nan,np.nan,'2016-02-28','2019-06-07','2019-06-07'],
'COUNSELLING_COUNT':[0,0,0,1,3,0,0,1,1,1]}

df = pd.DataFrame(data)

新增目标列的核心代码:

df['COUNSELLING_STARTED'] = ((df['COUNSELLING_COUNT'] == 1) & 
                             (df.groupby('CLIENT_ID')['COUNSELLING_COUNT']
                                .transform(lambda x: (x == 1).cumsum() == 1))
                            ).astype(int)

逻辑说明

  • df['COUNSELLING_COUNT'] == 1:先筛选出所有咨询计数为1的记录
  • 按CLIENT_ID分组后,对每个用户的咨询计数列计算(x == 1).cumsum(),第一次出现1时累加值为1,后续同用户再出现1时累加值会大于1,因此cumsum() == 1即可定位到每个用户首次咨询计数为1的记录
  • 两个条件同时满足的记录赋值为1,其余为0,转换为整数类型后即可得到预期的COUNSELLING_STARTED列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:54:05