Как заполнить значения NaN, учитывая среднее из двух предыдущих наблюдений - PullRequest
0 голосов
/ 03 апреля 2019

Я использую следующий код для заполнения значений NaN в пандах.Этот df имеет различные климатические переменные (температура, влажность, осадки, растительность ...)

df1[var_list]= df1[var_list].fillna(df1[var_list].rolling(3, min_periods=1).mean())

Я хочу заполнить NaN средними значениями из предыдущих 2 значений в этом столбце.В некоторой части df у меня есть непрерывные 8 NaN, поэтому приведенный выше код просто заполняет первые 2 NaN.Какой правильный вывод для кода, приведенного выше.

Но я хочу заполнить все NaN (может быть, принимая среднее значение вмененных значений NaN? - но я не знаю, как это сделать, так как я новичок в Python).Есть лучший способ сделать это.Я буду использовать входы с задержкой по времени для своих моделей ML, поэтому я не могу отказаться от каких-либо наблюдений.

var_list ==> содержит список переменных, которые имеют NaNs

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Полагаю, простой подход Джо мог бы заключаться в том, чтобы делать это снова и снова, пока не останется ни одного NaN, выполнив проверку


while df1.isnull().values.any() is True:
    df1[var_list]= df1[var_list].fillna(df1[var_list].rolling(3, min_periods=1).mean())

0 голосов
/ 03 апреля 2019

Это не будет идеально, но вы можете сделать что-то очень близкое к этому с помощью двух шагов:

  1. Выполните текущие вычисления скользящего среднего, как указано выше
  2. Заполнить вперед (.ffill())

Хотя ваш первый шаг будет заполнять только те NA, которые появляются непосредственно после значений, второй шаг будет заполняться оттуда.

Однако Я не уверен, как это будет обрабатывать случай, когда NA приходят после одного значения, например

3 2 NaN NaN 3 NaN NaN

Звучит так, будто вы хотите, чтобы эти последние два NaN были установлены на 2,5, но этот метод, вероятно, установит их на 3 (так как у скользящего среднего не будет достаточно предыдущих элементов для их заполнения). В конечном счете, все зависит от того, готовы ли вы немного изменить свою методологию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...