计算不规则时间序列数据中的值变化

时间:2015-08-21 07:45:47

标签: python pandas

我有一些时间序列数据,如下所示:

Timestamp             Value
26/09/2013 17:00:00     1
26/09/2013 17:05:00     1
26/09/2013 17:08:41     1
26/09/2013 17:38:43     1
26/09/2013 17:49:55     0
26/09/2013 17:49:57     1

我想将其转换为常规时间序列(15m),计算值在15m周期内的变化次数。像这样的东西

End Timestamp         Value at End   Times Changed
26/09/2013 17:15:00       1              0
26/09/2013 17:30:00       1              0
26/09/2013 17:45:00       1              0
26/09/2013 18:00:00       1              2

我看过熊猫,我无法弄清楚如何做到这一点。

一些上下文可能会有所帮助。这是SCADA(传感器)数据 - 并且1和0对应于设备的状态 - 例如开关打开或关闭。 SCADA系统在其变化时报告当前值,但它也不规则地轮询并报告该时间点的当前值(可能没有变化)。

我想要做的是将数据放入可以加载到数据库中的表单中,我们可以开始查询哪些开关经常更改状态。

1 个答案:

答案 0 :(得分:3)

这有点像黑客但它有效:

strip

编辑:

我刚刚意识到你可能只希望在没有数据的间隔中转发填充值列,而不是count_change列(尽管在这个具体示例中它不会改变任何东西)。解决方法可能是:

import datetime
import pandas as pd

time_vec =     [datetime.datetime(2013,9,26,17,0,0)
               ,datetime.datetime(2013,9,26,17,5,0) 
               ,datetime.datetime(2013,9,26,17,8,41)     
               ,datetime.datetime(2013,9,26,17,38,43)
               ,datetime.datetime(2013,9,26,17,49,55)
               ,datetime.datetime(2013,9,26,17,49,57)]
df = pd.DataFrame([1,1,1,1,0,1],index = time_vec,columns=['value'])

df['count_change']=0
df.ix[df.value!=df.value.shift(1),'count_change']=1
df.ix[0,'count_change']=0

df.resample('15min',how={'value': 'last', 'count_change': 'sum'},fill_method='ffill',label='right')
相关问题