我正在尝试从实际数据框中创建派生列,如下所示。我有一张包含连续用药的表格,用以下方式记录了用药时间。现在,我试图创建两个新列,它们仅记录药物何时开始和何时结束。实际数据框看起来很大,下面的数据框只是原始数据框的示例。
编辑:
编辑2:
DATETIME_1 DATETIME_2 DRUG
2018-11-13 07:00:00 2018-11-13 07:59:59 Drug 1
2018-11-13 08:00:00 2018-11-13 08:59:59 Drug 1
2018-11-13 09:00:00 2018-11-13 09:59:59 Drug 1
2018-11-13 10:00:00 2018-11-13 10:59:59 Drug 2
2018-11-13 11:00:00 2018-11-13 11:59:59 Drug 2
2018-11-13 12:00:00 2018-11-13 12:59:59 Drug 2
2018-11-13 13:00:00 2018-11-13 13:59:59 Drug 3
2018-11-15 07:00:00 2018-11-15 07:59:59 Drug 1
2018-11-15 08:00:00 2018-11-15 08:59:59 Drug 1
2018-11-15 09:00:00 2018-11-15 09:59:59 Drug 1
2018-11-25 15:00:00 2018-11-25 15:59:59 Drug 1
2018-11-25 16:00:00 2018-11-25 16:59:59 Drug 1
2018-11-25 22:00:00 2018-11-25 22:59:59 Drug 4
2018-11-25 23:00:00 2018-11-25 23:59:59 Drug 4
期望的DF:
DATETIME_1 DATETIME_2 DRUG START_TIME END_TIME
2018-11-13 07:00:00 2018-11-13 07:59:59 Drug 1 2018-11-13 07:00:00
2018-11-13 08:00:00 2018-11-13 08:59:59 Drug 1
2018-11-13 09:00:00 2018-11-13 09:59:59 Drug 1 2018-11-13 09:59:59
2018-11-13 10:00:00 2018-11-13 10:59:59 Drug 2 2018-11-13 10:00:00
2018-11-13 11:00:00 2018-11-13 11:59:59 Drug 2
2018-11-13 12:00:00 2018-11-13 12:59:59 Drug 2 2018-11-13 12:59:59
2018-11-13 13:00:00 2018-11-13 13:59:59 Drug 3 2018-11-13 13:00:00 2018-11-13 13:59:59
2018-11-15 07:00:00 2018-11-15 07:59:59 Drug 1 2018-11-15 07:00:00
2018-11-15 08:00:00 2018-11-15 08:59:59 Drug 1
2018-11-15 09:00:00 2018-11-15 09:59:59 Drug 1 2018-11-15 09:59:59
2018-11-25 15:00:00 2018-11-25 15:59:59 Drug 1 2018-11-25 15:00:00
2018-11-25 16:00:00 2018-11-25 16:59:59 Drug 1 2018-11-25 16:59:59
2018-11-25 22:00:00 2018-11-25 22:59:59 Drug 4 2018-11-25 22:00:00
2018-11-25 23:00:00 2018-11-25 23:59:59 Drug 4 2018-11-25 23:59:59
我不太确定如何解决此问题,如果能获得帮助,我将不胜感激。
答案 0 :(得分:1)
您可以使用idxmax
和idxmin
s=df.DRUG.ne(df.DRUG.shift()).cumsum()
t=df.DATETIME_1.dt.date
s1=df.groupby([s,t]).DATETIME_1.idxmin()
s2=df.groupby([s,t]).DATETIME_2.idxmax()
df['start']=df.loc[s1,'DATETIME_1']
df['end']=df.loc[s2,'DATETIME_2']