【问题标题】:Groupby - Generate date time as sequenceGroupby - 生成日期时间作为序列
【发布时间】:2020-04-23 18:38:11
【问题描述】:

我有一个如下所示的数据框

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 分钟。

对于会话 = s2,appt_start 时间 = 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 分钟。

【问题讨论】:

    标签: pandas pandas-groupby


    【解决方案1】:

    首先必须为每个session 指定第一个日期时间,这里使用带有Series.map 的字典,转换为日期时间,然后将to_timedelta 添加20 分钟的时间增量,并减去0 以添加0 Timedelta 作为第一个20 minutes 的组和多个:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2022-12-14
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 2019-08-14
      • 2017-08-09
      • 1970-01-01
      相关资源
      最近更新 更多