Python 不规则时间序列数据中数值变化的计数
我有一些时间序列数据如下所示:Python 不规则时间序列数据中数值变化的计数,python,pandas,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
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系统会在当前值发生变化时报告当前值,但也会在该时间点(可能未发生变化)不定期轮询和报告当前值
我想做的是将数据转换成一种可以加载到数据库中的形式,然后我们可以开始查询哪些交换机经常改变状态。这有点像黑客,但它可以工作:
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')
编辑:
我刚刚意识到,您可能只希望在没有数据的间隔内向前填充value列,而不希望向前填充count\u change列(尽管在这个特定示例中,它不会更改任何内容)。解决办法可以是:
df.resample('15min',how={'value': 'last', 'count_change': 'sum'},label='right').fillna(value={'count_change':0}).fillna(method='ffill')
伟大的黑客-添加了一些更新,因为ix不推荐使用:df.loc[df.value!=df.value.shift(1),“count_change”]=1,df.loc['2013-09-26 17:00:00','count_change']=0