Медиана скользящего окна, исключая нули
Когда я пытаюсь найти скользящую медиану следующих серий, я получаю список NaN.
Я использовал:
b = a[a!=0].rolling(100).median()
a = фактический ряд данных (датафрейм). Имеет кучу нулей, которые я хочу исключить при поиске медианы
b = скользящее среднее
a[a!=0] дает мне следующую серию.
2017-10-05 NaN
2017-10-06 -0.001074
2017-10-09 -0.001804
2017-10-10 NaN
2017-10-11 NaN
2017-10-12 -0.001687
2017-10-13 NaN
2017-10-16 NaN
2017-10-17 NaN
2017-10-18 NaN
2017-10-19 NaN
2017-10-20 NaN
2017-10-23 -0.003972
2017-10-24 NaN
2017-10-25 -0.004663
2017-10-26 NaN
2017-10-27 NaN
2017-10-30 -0.003192
2017-10-31 NaN
2017-11-01 NaN
2017-11-02 NaN
2017-11-03 NaN
t2017-11-06 NaN
2017-11-07 -0.000189
2017-11-08 NaN
2017-11-09 -0.003762
2017-11-10 -0.000898
2017-11-13 NaN
2017-11-14 -0.002310
вывод - это просто список NaN.
Что я делаю неправильно? благодарю вас!
2 ответа
Похоже, ошибка в пандах.
Попробуй это:
a[a!=0].rolling(window=100, center=False, min_periods=1).median()
Поскольку a является Dataframe, а не Series, если вы попытаетесь выполнить индексирование, вы получите NaN.
Рассмотрим эту серию
s = pd.Series(np.random.randint(0,10, 20), index = pd.date_range(start = '01/01/2017', periods = 20))
Если вы нарежете его, нули будут удалены
s[s!=0]
Но для кадра данных, тот же код будет вводить NaN.
df = pd.DataFrame(np.random.randint(0,10, 20), index = pd.date_range(start = '01/01/2017', periods = 20))
Вы можете справиться с этим, указав имя столбца при индексации
df[df[0] != 0] #df[0] being the column