Pandas Rolling Computations on Sliding Windows (Unevenly spaced)
Perhaps it makes more sense to use rolling_sum
:
pd.rolling_sum(ts, window=1, freq='1ms')
You can solve most problems of this sort with cumsum and binary search.
from datetime import timedelta
def msum(s, lag_in_ms):
lag = s.index - timedelta(milliseconds=lag_in_ms)
inds = np.searchsorted(s.index.astype(np.int64), lag.astype(np.int64))
cs = s.cumsum()
return pd.Series(cs.values - cs[inds].values + s[inds].values, index=s.index)
res = msum(ts, 100)
print pd.DataFrame({'a': ts, 'a_msum_100': res})
a a_msum_100
2013-02-01 09:00:00.073479 5 5
2013-02-01 09:00:00.083717 8 13
2013-02-01 09:00:00.162707 1 14
2013-02-01 09:00:00.171809 6 20
2013-02-01 09:00:00.240111 7 14
2013-02-01 09:00:00.258455 0 14
2013-02-01 09:00:00.336564 2 9
2013-02-01 09:00:00.536416 3 3
2013-02-01 09:00:00.632439 4 7
2013-02-01 09:00:00.789746 9 9
[10 rows x 2 columns]
You need a way of handling NaNs and depending on your application, you may need the prevailing value asof the lagged time or not (ie difference between using kdb+ bin vs np.searchsorted).
Hope this helps.
This is an old question, but for those who stumble upon this from google: in pandas 0.19 this is built-in as the function
http://pandas.pydata.org/pandas-docs/stable/computation.html#time-aware-rolling
So to get 1 ms windows it looks like you get a Rolling object by doing
dft.rolling('1ms')
and the sum would be
dft.rolling('1ms').sum()