我有一个带有时间和值列的 pandas 数据框。我正在尝试创建两个新列“ START_TIME”和“ END_TIME”。这是与药物相关的数据,并且存储在数据库中的情况很差,因此我尝试转换表格。在这种情况下,患者的药物从2018年开始-11-07 23:59:32的剂量值为80.o,所以我想捕捉一下,因为药物的开始时间和结束时间是最后一个值之后的第一个零,那就是一轮药物治疗每当新值开始时,它就被视为第二轮用药,我想按照前面所述的以下方式捕获开始时间和结束时间。
Time Values
2018-11-07 23:59:32 80.0
2018-11-08 04:35:09 80.0
2018-11-08 05:31:24 40.0
2018-11-24 18:29:30 0.0
2018-11-24 18:33:14 0.0
2018-11-26 17:39:31 20.0
2018-11-26 18:51:07 20.0
2018-11-26 21:04:35 0.0
2018-11-26 21:05:20 0.0
2018-11-26 21:13:44 0.0
2018-11-26 21:25:57 0.0
2018-11-29 02:19:57 7.0
2018-12-09 16:02:06 5.0
2018-12-09 16:33:03 2.5
2018-12-09 21:02:10 0.0
我相信,以简单的for和if循环无法完成此操作,因为我从一个简单的步骤开始,但失败了
for i in df['Values']:
if i+1 != 0:
df['START_TIME'] = df['TIME'].copy()
预期的DataFrame:
Time Values START_TIME END_TIME
2018-11-07 23:59:32 80.0 2018-11-07 23:59:32
2018-11-08 04:35:09 80.0
2018-11-08 05:31:24 40.0
2018-11-24 18:29:30 0.0 2018-11-24 18:29:30
2018-11-24 18:33:14 0.0
2018-11-26 17:39:31 20.0 2018-11-26 17:39:31
2018-11-26 18:51:07 20.0
2018-11-26 21:04:35 0.0 2018-11-26 21:04:35
2018-11-26 21:05:20 0.0
2018-11-26 21:13:44 0.0
2018-11-26 21:25:57 0.0
2018-11-29 02:19:57 7.0 2018-11-29 02:19:57
2018-12-09 16:02:06 5.0
2018-12-09 16:33:03 2.5
2018-12-09 21:02:10 0.0 2018-12-09 21:02:10
如果能得到帮助,我将不胜感激。
IIUC通过使用创建条件diff
,则等于-1和1的值将成为终点和起点
s=df.Values.eq(0).astype(int).diff().fillna(-1)
df.loc[s==-1,'START_TIME']=df.Time
df.loc[s==1,'END_TIME']=df.Time
df
Out[334]:
Time Values START_TIME END_TIME
0 2018-11-07 23:59:32 80.0 2018-11-07 23:59:32 NaT
1 2018-11-08 04:35:09 80.0 NaT NaT
2 2018-11-08 05:31:24 40.0 NaT NaT
3 2018-11-24 18:29:30 0.0 NaT 2018-11-24 18:29:30
4 2018-11-24 18:33:14 0.0 NaT NaT
5 2018-11-26 17:39:31 20.0 2018-11-26 17:39:31 NaT
6 2018-11-26 18:51:07 20.0 NaT NaT
7 2018-11-26 21:04:35 0.0 NaT 2018-11-26 21:04:35
8 2018-11-26 21:05:20 0.0 NaT NaT
9 2018-11-26 21:13:44 0.0 NaT NaT
10 2018-11-26 21:25:57 0.0 NaT NaT
11 2018-11-29 02:19:57 7.0 2018-11-29 02:19:57 NaT
12 2018-12-09 16:02:06 5.0 NaT NaT
13 2018-12-09 16:33:03 2.5 NaT NaT
14 2018-12-09 21:02:10 0.0 NaT 2018-12-09 21:02:10