Python 熊猫滚动平均收益率';楠';

Python 熊猫滚动平均收益率';楠';,python,numpy,pandas,nan,mean,Python,Numpy,Pandas,Nan,Mean,我有一个位置数组(索引),在数据集中可以找到局部最大值。我已采用以下简单方法进行极值检测,但由于我的数据对较小的波动敏感,我希望过滤检测到的极值,以仅包括偏离平均值一个标准偏差的异常值,如在活动量的21分钟滑动窗口中测得的 为此,我需要在滚动基础上计算每个21分钟窗口的平均值和标准偏差,需要使用滚动平均值方法。然而,通过将检测到的\u极值np.数组传递给滚动平均值和stddev方法,我得到了以下结果:[[nan nan…]不可用的结果。为什么会这样 x = np.array(df_1, dtyp

我有一个位置数组(索引),在数据集中可以找到局部最大值。我已采用以下简单方法进行极值检测,但由于我的数据对较小的波动敏感,我希望过滤检测到的极值,以仅包括偏离平均值一个标准偏差的异常值,如在活动量的21分钟滑动窗口中测得的

为此,我需要在滚动基础上计算每个21分钟窗口的平均值和标准偏差,需要使用滚动平均值方法。然而,通过将
检测到的\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 ]