#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Допустим, у меня есть такие данные:
df = pd.DataFrame({'col1': [5, np.nan, 2, 2, 5, np.nan, 4], 'col2':[1,3,np.nan,np.nan,5,np.nan,4]})
print(df)
col1 col2
0 5.0 1.0
1 NaN 3.0
2 2.0 NaN
3 2.0 NaN
4 5.0 5.0
5 NaN NaN
6 4.0 4.0
Как я могу использовать fillna()
для замены значений NaN средним значением предыдущего и последующего значений, если оба они не являются NaN?
Результат будет выглядеть следующим образом:
col1 col2
0 5.0 1.0
1 3.5 3.0
2 2.0 NaN
3 2.0 NaN
4 5.0 5.0
5 4.5 4.5
6 4.0 4.0
Кроме того, есть ли способ вычисления среднего значения из предыдущих n и последующих n значений (если все они не NaN)?
Ответ №1:
Мы можем сдвигать фрейм данных вперед и назад. Затем сложите их вместе и разделите на два и используйте это для заполнения:
s1, s2 = df.shift(), df.shift(-1)
df = df.fillna((s1 s2) / 2)
col1 col2
0 5.0 1.0
1 3.5 3.0
2 2.0 NaN
3 2.0 NaN
4 5.0 5.0
5 4.5 4.5
6 4.0 4.0