Заполните пропущенное значение путем усреднения предыдущего значения строки - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу заполнить пропущенное значение средним значением предыдущего N значения строки, пример показан ниже:

N=2
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                    [3, 4, np.nan, 1],
                    [np.nan, np.nan, np.nan, 5],
                    [np.nan, 3, np.nan, np.nan]],
                    columns=list('ABCD'))

DataFrame похож на:

     A   B   C  D
0   NaN 2.0 NaN 0
1   3.0 4.0 NaN 1
2   NaN NaN NaN 5
3   NaN 3.0 NaN NaN

Результат должен быть:

     A   B       C  D
0   NaN 2.0     NaN 0
1   3.0 4.0     NaN 1
2   NaN (4+2)/2 NaN 5
3   NaN 3.0     NaN (1+5)/2

Мне интересно, есть ли элегантный и быстрый способ добиться этого без цикла for.

1 Ответ

0 голосов
/ 16 ноября 2018

rolling + mean + shift

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

df = df.fillna(df.rolling(2).mean().shift())

print(df)

     A    B   C    D
0  NaN  2.0 NaN  0.0
1  3.0  4.0 NaN  1.0
2  NaN  3.0 NaN  5.0
3  NaN  3.0 NaN  3.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...