python:使用timestamp列为行分配时间段

时间:2017-08-15 20:44:03

标签: python pandas datetime

我有一个带有一些数字观察的数据集,其中包含开始和结束时间。我正在尝试为每个观察分配一个bin,每个bin是5分钟,如果事务在该间隔中开始,则应该分配。 (我在大熊猫中探索了重新采样选项,但在那里我找不到保留观察的独特属性的方法,例如数量)

data
id     start               end                 amt count
1004 2017-07-01 08:02:30 2017-07-01 10:02:30 250   1
1004 2017-07-01 08:09:30 2017-07-01 09:03:35 250   1
1006 2017-07-01 09:54:50 2017-07-01 10:26:31 50    1

timebins
0 00:00:00
1 00:05:00
2 00:10:00

期望的输出将是,

id       start           end                 amt count    bin 
1004 2017-07-01 08:02:30 2017-07-01 10:02:30 250   1      08:00

2 个答案:

答案 0 :(得分:1)

您可以拼接开始时间戳字符串并向下舍入到最近的5分钟间隔:

def binify(timestamp):
    h, m, s = timestamp.split()[1].split(':')
    m = int(m)
    m = m - (m % 5) 
    return h + ':' + str(m).zfill(2)

df['bin'] = [binify(x) for x in df['start']]

答案 1 :(得分:1)

鉴于数据可以直接用于日期时间格式,我使用dt访问时间

def makebins(x):
    x=pd.to_datetime(x)
    return str(x.hour) + ":" + str(int(x.minute/5)*5)

df["bins"] = df['start'].apply(makebins)