pandas датафрейм заполняет nan в среднем из двух значений - PullRequest
1 голос
/ 17 апреля 2020

У меня есть следующий фрейм данных:

      A    label
0    1.0     a
1    2.0     a
2    3.0     a
3    NaN     a
4    NaN     a
5    NaN     a
6    9.0     a
7    8.0     a
8    7.0     a
9    NaN     a
10   NaN     a
11  21.0     a
12  32.0     a
13  12.0     a

Я хочу заполнить значения nan в столбце A следующим образом:

Заполнить нулевые значения по индексам 3,4 и 5: взяв среднее значение по индексам 2 и 6, т.е. (3 + 9) / 2.

Заполнить нулевые значения в индексах 9 и 10: взяв среднее значение в индексах 8 и 11, т.е. (7 + 21) /2.

И аналогично для всех других нулевых значений в кадре данных , если происходит. Я провел много времени, думая о точном решении, но не мог найти его. Как я могу это сделать?

1 Ответ

1 голос
/ 17 апреля 2020

Используйте прямое заполнение пропущенных значений, добавьте обратное заполнение ошибочных значений и последнее деление на 2 для среднего значения:

df['A'] = df.A.ffill().add(df.A.bfill()).div(2)
print (df)
       A label
0    1.0     a
1    2.0     a
2    3.0     a
3    6.0     a
4    6.0     a
5    6.0     a
6    9.0     a
7    8.0     a
8    7.0     a
9   14.0     a
10  14.0     a
11  21.0     a
12  32.0     a
13  12.0     a

Подробности :

print (df.assign(ffill = df.A.ffill(),
                 bfill = df.A.bfill(),
                 both  = df.A.ffill().add(df.A.bfill()),
                 fin = df.A.ffill().add(df.A.bfill()).div(2)))
       A label  ffill  bfill  both   fin
0    1.0     a    1.0    1.0   2.0   1.0
1    2.0     a    2.0    2.0   4.0   2.0
2    3.0     a    3.0    3.0   6.0   3.0
3    NaN     a    3.0    9.0  12.0   6.0
4    NaN     a    3.0    9.0  12.0   6.0
5    NaN     a    3.0    9.0  12.0   6.0
6    9.0     a    9.0    9.0  18.0   9.0
7    8.0     a    8.0    8.0  16.0   8.0
8    7.0     a    7.0    7.0  14.0   7.0
9    NaN     a    7.0   21.0  28.0  14.0
10   NaN     a    7.0   21.0  28.0  14.0
11  21.0     a   21.0   21.0  42.0  21.0
12  32.0     a   32.0   32.0  64.0  32.0
13  12.0     a   12.0   12.0  24.0  12.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...