Me gustaría llenar el nan
df
con un promedio de elementos adyacentes.
Considere un dataframe:
df = pd.DataFrame({'val': [1,np.nan, 4, 5, np.nan, 10, 1,2,5, np.nan, np.nan, 9]}) val 0 1.0 1 NaN 2 4.0 3 5.0 4 NaN 5 10.0 6 1.0 7 2.0 8 5.0 9 NaN 10 NaN 11 9.0
Mi salida deseada es:
val 0 1.0 1 2.5 2 4.0 3 5.0 4 7.5 5 10.0 6 1.0 7 2.0 8 5.0 9 7.0 <<< deadend 10 7.0 <<< deadend 11 9.0
He analizado otras soluciones, como la celda de relleno que contiene NaN con un valor medio antes y después , pero esto no funcionará en caso de que haya dos o más np.nan
s consecutivos.
¡Cualquier ayuda es muy apreciada!
Use ffill
+ bfill
y divida por 2:
df = (df.ffill()+df.bfill())/2 print(df) val 0 1.0 1 2.5 2 4.0 3 5.0 4 7.5 5 10.0 6 1.0 7 2.0 8 5.0 9 7.0 10 7.0 11 9.0
EDITAR: Si el 1er y último elemento contiene NaN
, use (sugerencia Dark
):
df = pd.DataFrame({'val':[np.nan,1,np.nan, 4, 5, np.nan, 10, 1,2,5, np.nan, np.nan, 9,np.nan,]}) df = (df.ffill()+df.bfill())/2 df = df.bfill().ffill() print(df) val 0 1.0 1 1.0 2 2.5 3 4.0 4 5.0 5 7.5 6 10.0 7 1.0 8 2.0 9 5.0 10 7.0 11 7.0 12 9.0 13 9.0