EDIT: This question was asked in 2016 and similar questions have been posted on SO years later after the functionality was finally removed, e.g. module 'pandas' has no attribute 'rolling_mean'
However, the question concerns performance of the new pd.rolling.mean()
and should stay open until the associated pandas issue is fixed.
It looks like pd.rolling_mean
is becoming deprecated for ndarrays
,
pd.rolling_mean(x, window=2, center=False)
FutureWarning: pd.rolling_mean is deprecated for ndarrays and will be removed in a future version
but it seems to be the fastest way of doing this, according to this SO answer.
Are there now new ways of doing this directly with SciPy or NumPy that are as fast as pd.rolling_mean
?
EDIT -- Unfortunately, it looks like the new way is not nearly as fast:
New version of Pandas:
In [1]: x = np.random.uniform(size=100)
In [2]: %timeit pd.rolling_mean(x, window=2)
1000 loops, best of 3: 240 µs per loop
In [3]: %timeit pd.Series(x).rolling(window=2).mean()
1000 loops, best of 3: 226 µs per loop
In [4]: pd.__version__
Out[4]: '0.18.0'
Old version:
In [1]: x = np.random.uniform(size=100)
In [2]: %timeit pd.rolling_mean(x,window=2)
100000 loops, best of 3: 12.4 µs per loop
In [3]: pd.__version__
Out[3]: u'0.17.1'
Looks like the new way is via methods on the DataFrame.rolling
class (I guess you're meant to think of it sort of like a groupby
):
http://pandas.pydata.org/pandas-docs/version/0.18.0/whatsnew.html
e.g.
x.rolling(window=2).mean()
try this
x.rolling(window=2, center=False).mean()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With