从时间戳创建事件

时间:2017-05-22 10:21:17

标签: python

也许有人可以帮助我:

我有TimeDeltas的DataFrame:

timestamp       Time_Delta 
01.12.2014 00:10     0     
01.12.2014 00:25     15   
01.12.2014 00:30     5    
01.12.2014 00:35     5    
01.12.2014 00:50     15   
01.12.2014 01:15     25
01.12.2014 01:20     5
01.12.2014 01:35     15
01.12.2014 02:05     30
01.12.2014 02:25     20
01.12.2014 02:30     5    
01.12.2014 02:35     5    
01.12.2014 02:40     5    
01.12.2014 02:50     10   
01.12.2014 03:15     25
01.12.2014 03:20     5    
01.12.2014 03:30     10  
01.12.2014 03:40     10   
01.12.2014 03:55     15   
01.12.2014 04:25     30

如果TimeDelta小于或等于15分钟并且至少连续发生三次,我想要的是创建事件。看起来应该是这样的:

timestamp      Time_Delta Event_Nr 
01.12.2014 00:10    0     
01.12.2014 00:25    15     1
01.12.2014 00:30    5      1
01.12.2014 00:35    5      1
01.12.2014 00:50    15     1
01.12.2014 01:15    25
01.12.2014 01:20    5
01.12.2014 01:35    15
01.12.2014 02:05    30
01.12.2014 02:25    20 
01.12.2014 02:30    5      2
01.12.2014 02:35    5      2
01.12.2014 02:40    5      2
01.12.2014 02:50    10     2
01.12.2014 03:15    25
01.12.2014 03:20    5      3
01.12.2014 03:30    10     3
01.12.2014 03:40    10     3 
01.12.2014 03:55    15     3
01.12.2014 04:25    30

不幸的是我的python技能非常弱,所以如果有人可以帮助我的话会很棒!

祝你好运

我的代码如下所示:

df1=DataFrame(index=df.index, columns=['Number_Timestamps', 'Event_Number'])
Event_Nr=0
index=0
cnt1=0
cnt2=0
for i in range(len(df.index)-1):
    if df.Time_Delta.values[i]<=15:
        cnt1=cnt1+1
        if (cnt1>=3) & (df.Time_Delta.values[i+1]<=15):
        cnt2=cnt2+1
        index=i-cnt2
    else:
        index=i-cnt2
        df1.Event_Number.values[index+2:i+1]=Event_Nr                      
        Event_Nr+=1
        cnt2=2

它有效,但看起来很不可读......

1 个答案:

答案 0 :(得分:0)

我不打算给你代码,只是解决这个问题的方法。

您应该准备一个缓冲变量(即行列表),其中包含尚未做出决定的已处理行。在做出决定时,您只需通过将其元素放在新的DataFrame(或其他类型的数据结构)中来刷新缓冲区。

创建循环处理所有行,以及循环外的两个变量:保持Event_nr的最后已知值的变量,以及空缓冲区。

在for循环中处理单行时,将其放入缓冲区。然后检查(考虑delta值和所有其他假设)是否可以决定(ALL)到目前为止放入缓冲区的行。 如果可以做出决定,可以通过编辑Event_nr值(如果条件已完成)将这些行添加到新的DataFrame中并清空缓冲区。 如果无法做出决定,请继续将行放入缓冲区并检查条件。