2017-08-15 67 views
1

我有一个数据集,其中包含一些数字观察值以及开始和结束时间。我试图给每个观察分配一个箱,每个箱都是5分钟,如果在该时间间隔内开始交易,应该分配这个箱。 (我探讨了大熊猫重采样的选择,但在那里我无法找到一个办法留住观察独特的属性,例如金额)python:使用时间戳列将行时间分配给行

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 

回答

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

鉴于数据可以直接在日期时间的格式来使用,我用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)