Python 熊猫滚动平均收益率';楠';
我有一个位置数组(索引),在数据集中可以找到局部最大值。我已采用以下简单方法进行极值检测,但由于我的数据对较小的波动敏感,我希望过滤检测到的极值,以仅包括偏离平均值一个标准偏差的异常值,如在活动量的21分钟滑动窗口中测得的 为此,我需要在滚动基础上计算每个21分钟窗口的平均值和标准偏差,需要使用滚动平均值方法。然而,通过将Python 熊猫滚动平均收益率';楠';,python,numpy,pandas,nan,mean,Python,Numpy,Pandas,Nan,Mean,我有一个位置数组(索引),在数据集中可以找到局部最大值。我已采用以下简单方法进行极值检测,但由于我的数据对较小的波动敏感,我希望过滤检测到的极值,以仅包括偏离平均值一个标准偏差的异常值,如在活动量的21分钟滑动窗口中测得的 为此,我需要在滚动基础上计算每个21分钟窗口的平均值和标准偏差,需要使用滚动平均值方法。然而,通过将检测到的\u极值np.数组传递给滚动平均值和stddev方法,我得到了以下结果:[[nan nan…]不可用的结果。为什么会这样 x = np.array(df_1, dtyp
检测到的\u极值
np.数组
传递给滚动平均值
和stddev
方法,我得到了以下结果:[[nan nan…]
不可用的结果。为什么会这样
x = np.array(df_1, dtype=np.float)
# for local maxima
positions = argrelextrema(x, np.greater)
detected_extrema = x.take(positions)
print detected_extrema
print pd.rolling_mean(detected_extrema, 21, min_periods=None, freq=None, center=False, how=None)
print pd.rolling_std(detected_extrema, 21, min_periods=None, freq=None, center=False, how=None)
输出:
您可以尝试重塑阵列:
a = np.array([[89, 60, 78, 55, 61, 49, 38, 40, 30, 20, 36,39,22,19, 772, 204, 153, 139, 184, 130, 154, 187, 174, 279, 273, 164,42,36,1004, 216, 761, 322, 205, 564, 373, 171]])
a.shape
(1, 36)
pd.rolling_mean(a, 21, min_periods=None, freq=None, center=False, how=None)
[[ nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan]]
b = a.flatten()
b.shape
(36,)
pd.rolling_mean(b, 21, min_periods=None, freq=None, center=False, how=None)
[ nan nan nan nan nan
nan nan nan nan nan
nan nan nan nan nan
nan nan nan nan nan
112.95238095 117.61904762 123.04761905 132.61904762 143. 147.9047619
147.57142857 147.47619048 193.38095238 202.23809524 237.52380952
251.14285714 259.04761905 284.85714286 301.71428571 273.0952381 ]
您的输入数据中是否有
nan
s?
a = np.array([[89, 60, 78, 55, 61, 49, 38, 40, 30, 20, 36,39,22,19, 772, 204, 153, 139, 184, 130, 154, 187, 174, 279, 273, 164,42,36,1004, 216, 761, 322, 205, 564, 373, 171]])
a.shape
(1, 36)
pd.rolling_mean(a, 21, min_periods=None, freq=None, center=False, how=None)
[[ nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan]]
b = a.flatten()
b.shape
(36,)
pd.rolling_mean(b, 21, min_periods=None, freq=None, center=False, how=None)
[ nan nan nan nan nan
nan nan nan nan nan
nan nan nan nan nan
nan nan nan nan nan
112.95238095 117.61904762 123.04761905 132.61904762 143. 147.9047619
147.57142857 147.47619048 193.38095238 202.23809524 237.52380952
251.14285714 259.04761905 284.85714286 301.71428571 273.0952381 ]