Pandas: заполняется локальным средним значением, если условие выполнено

#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