我有一些时间序列数据,如下所示:
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系统在其变化时报告当前值,但它也不规则地轮询并报告该时间点的当前值(可能没有变化)。
我想要做的是将数据放入可以加载到数据库中的表单中,我们可以开始查询哪些开关经常更改状态。
答案 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')