I would like to fill missing values in a pandas dataframe with the average of the cells directly before and after the missing value. So if it was [1, NaN, 3], the NaN value
Use spies006's example df.
df = pd.DataFrame({'a': [10, 6, -3, -2, 4, 12, 3, 3],
'b': [6, -3, np.nan, 12, 8, 11, -5, -5],
'id': [1, 1, 1, 1, np.nan, 2, 2, 4]})
#use np.where to locate the nans and fill it with the average of surrounding elements.
df.where(df.notnull(), other=(df.fillna(method='ffill')+df.fillna(method='bfill'))/2)
Out[2517]:
a b id
0 10 6.0 1.0
1 6 -3.0 1.0
2 -3 4.5 1.0
3 -2 12.0 1.0
4 4 8.0 1.5
5 12 11.0 2.0
6 3 -5.0 2.0
7 3 -5.0 4.0