我有一个不规则索引的时间序列数据与秒的分辨率,如:计算时间在某些状态的时间序列数据
import pandas as pd
idx = ['2012-01-01 12:43:35', '2012-03-12 15:46:43',
'2012-09-26 18:35:11', '2012-11-11 2:34:59']
status = [1, 0, 1, 0]
df = pd.DataFrame(status, index=idx, columns = ['status'])
df = df.reindex(pd.to_datetime(df.index))
In [62]: df
Out[62]:
status
2012-01-01 12:43:35 1
2012-03-12 15:46:43 0
2012-09-26 18:35:11 1
2012-11-11 02:34:59 0
,我感兴趣的是今年的分数时的状态为1。办法我目前做的是,我在这一年重新索引df
与每一个第二和使用正填充,如:
full_idx = pd.date_range(start = '1/1/2012', end = '12/31/2012', freq='s')
df1 = df.reindex(full_idx, method='ffill')
它返回一个DataFrame
包含每秒的一年,我可以再计算出均值,以看到的百分比时间在1
状态,如:
In [66]: df1
Out[66]:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 31536001 entries, 2012-01-01 00:00:00 to 2012-12-31 00:00:00
Freq: S
Data columns:
status 31490186 non-null values
dtypes: float64(1)
In [67]: df1.status.mean()
Out[67]: 0.31953371123308066
的问题是,我必须为大量的数据做到这一点,并重新索引它每一秒钟在今年迄今为止最昂贵的操作。
有什么更好的方法来做到这一点?
这是计算缺少的一天:这是使用日从1/1/2012开始到2012年12月31日的*开始*之间的时间的一小部分, – mstringer