我有一些医院就诊医疗保健数据,其格式为:
我想创建一列COUNSELLING_STARTED
,它指示客户机CLIENT_ID
是否已经开始咨询,但只是第一次。i、 e.第一次发生时COUNSELLING_COUNT == 1
对于每个CLIENT_ID
,应产生以下数据帧:
下面是生成数据帧的代码:
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)
更新
在我最初的回答中,我忽略了一个事实,即如果某人没有咨询日期,我的方法会为他们的第一个条目指定一个
1
。这里有两种快速解决方法一个选项是在执行我所描述的groupby之前,显式删除带有NA的行:
第二种选择是完全按照我之前所做的做,然后覆盖错误条目(即,咨询是NA的地方):
这是我最初的回答:
解释(使用我的第一种方法):
找出咨询日期在哪里
nan
;然后按客户端ID分组并找到最小值的索引(这将是第一个条目):您正在使用这些索引来选择在新列中写入
1
的位置。即使dropped
没有任何NA值,我们仍然在groupby中使用.isna()
来获得一个值,我们可以使用min
(而不是字符串)。您还可以执行类似.astype(bool)
的操作最后的
df
是:如果您希望显式选择最早的咨询日期(而不是第一个非NA值),则可以将其用作索引器:
这在这里给出了相同的结果,因为对每个客户的日期进行了排序(即,最早观察到的日期是第一个非NA值)
相关问题 更多 >
编程相关推荐