如何为按日期排序的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
相关产品推荐
相关产品推荐

