pd.rolling_mean
はndarrays
のサポートが終了しているようです。
pd.rolling_mean(x, window=2, center=False)
FutureWarning:pd.rolling_meanはndarraysでは非推奨であり、将来のバージョンでは削除される予定です
this SO answer によると、これはこれを行う最も速い方法のようです。
pd.rolling_mean
と同じくらい高速なSciPyまたはNumPyでこれを直接行う新しい方法はありますか?
編集-残念ながら、新しい方法はそれほど速くないようです:
パンダの新バージョン:
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'
古いバージョン:
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'
新しい方法はDataFrame.rolling
クラス(これはgroupby
のようなものと考えるつもりだと思います): http://pandas.pydata.org/pandas-docs/version/0.18.0/ whatsnew.html
例えば.
x.rolling(window=2).mean()
これを試して
x.rolling(window=2, center=False).mean()
私は scipy.ndimage.filters.uniform_filter1d 私の answer のように、リンクされた質問に提案します。大規模な配列の場合も高速です。
import numpy as np
from scipy.ndimage.filters import uniform_filter1d
N = 1000
x = np.random.random(100000)
%timeit pd.rolling_mean(x, window=N)
__main__:257: FutureWarning: pd.rolling_mean is deprecated for ndarrays and will be removed in a future version
The slowest run took 84.55 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 7.37 ms per loop
%timeit uniform_filter1d(x, size=N)
10000 loops, best of 3: 190 µs per loop