我有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
它有效,但看起来很不可读......
答案 0 :(得分:0)
我不打算给你代码,只是解决这个问题的方法。
您应该准备一个缓冲变量(即行列表),其中包含尚未做出决定的已处理行。在做出决定时,您只需通过将其元素放在新的DataFrame(或其他类型的数据结构)中来刷新缓冲区。
创建循环处理所有行,以及循环外的两个变量:保持Event_nr的最后已知值的变量,以及空缓冲区。
在for循环中处理单行时,将其放入缓冲区。然后检查(考虑delta值和所有其他假设)是否可以决定(ALL)到目前为止放入缓冲区的行。 如果可以做出决定,可以通过编辑Event_nr值(如果条件已完成)将这些行添加到新的DataFrame中并清空缓冲区。 如果无法做出决定,请继续将行放入缓冲区并检查条件。