Groupby-按顺序生成日期时间



我有一个数据帧,如下所示

session      slot_num
s1           1
s1           2
s1           3
s1           3
s1           4
s1           4
s2           1
s2           2
s2           2
s2           3
s2           4
s2           5
s2           5
s2           6
s3           1
s3           1
s3           2
s3           3

根据上面的内容,我想创建一个列appt_time,如下所示。

预期输出

session      slot_num     appt_time
s1           1            2020-01-06 09:00:00
s1           2            2020-01-06 09:20:00
s1           3            2020-01-06 09:40:00
s1           3            2020-01-06 09:40:00
s1           4            2020-01-06 10:00:00
s1           4            2020-01-06 10:00:00
s2           1            2020-01-06 08:20:00
s2           2            2020-01-06 08:40:00
s2           2            2020-01-06 08:40:00
s2           3            2020-01-06 09:00:00
s2           4            2020-01-06 09:20:00
s2           5            2020-01-06 09:40:00
s2           5            2020-01-06 09:40:00
s2           6            2020-01-06 10:00:00
s3           1            2020-01-09 13:00:00
s3           1            2020-01-09 13:00:00
s3           2            2020-01-09 13:20:00
s3           3            2020-01-09 13:40:00

说明:对于会话=s1,appt_start时间=2020-01-06 09:00:00,则对于该会话的slot_num的每次增加,appt_time增加20分钟。

对于session=s2,appt_start time=2020-01-06 08:20:00,则对于该会话的slot_num的每次增加,appt_time增加20分钟。

对于会话=s3,appt_start时间=2020-01-09 13:00:00,则对于该会话的slot_num的每次增加,appt_time增加20分钟。

First是每个session必须指定的第一个日期时间,这里是与Series.map一起使用的字典,转换为日期时间,然后通过to_timedelta将时间增量增加20分钟,对于第一组添加的0 Timedelta减去0,对于20 minute乘以

d = {'s1':'2020-01-06 09:00:00',
's2':'2020-01-06 08:20:00',
's3':'2020-01-09 13:00:00'}
df['appt_time'] =  (pd.to_datetime(df['session'].map(d)) + 
pd.to_timedelta(df['slot_num'].sub(1), unit='T').mul(20))
print (df)
session  slot_num           appt_time
0       s1         1 2020-01-06 09:00:00
1       s1         2 2020-01-06 09:20:00
2       s1         3 2020-01-06 09:40:00
3       s1         3 2020-01-06 09:40:00
4       s1         4 2020-01-06 10:00:00
5       s1         4 2020-01-06 10:00:00
6       s2         1 2020-01-06 08:20:00
7       s2         2 2020-01-06 08:40:00
8       s2         2 2020-01-06 08:40:00
9       s2         3 2020-01-06 09:00:00
10      s2         4 2020-01-06 09:20:00
11      s2         5 2020-01-06 09:40:00
12      s2         5 2020-01-06 09:40:00
13      s2         6 2020-01-06 10:00:00
14      s3         1 2020-01-09 13:00:00
15      s3         1 2020-01-09 13:00:00
16      s3         2 2020-01-09 13:20:00
17      s3         3 2020-01-09 13:40:00

最新更新