Медиана скользящего окна, исключая нули

Когда я пытаюсь найти скользящую медиану следующих серий, я получаю список 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
Другие вопросы по тегам