我有一个数据帧,如下所示
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