Solución:
Esto debería funcionar:
input_data_frame[var_list]= input_data_frame[var_list].fillna(pd.rolling_mean(input_data_frame[var_list], 6, min_periods=1))
Tenga en cuenta que el window
es 6
porque incluye el valor de NaN
sí mismo (que no se cuenta en el promedio). Tambien el otro NaN
los valores no se utilizan para los promedios, por lo que si se encuentran menos de 5 valores en la ventana, el promedio se calcula sobre los valores reales.
Ejemplo:
df = {'a': [1, 1,2,3,4,5, np.nan, 1, 1, 2, 3, 4, 5, np.nan] }
df = pd.DataFrame(data=df)
print df
a
0 1.0
1 1.0
2 2.0
3 3.0
4 4.0
5 5.0
6 NaN
7 1.0
8 1.0
9 2.0
10 3.0
11 4.0
12 5.0
13 NaN
Producción:
a
0 1.0
1 1.0
2 2.0
3 3.0
4 4.0
5 5.0
6 3.0
7 1.0
8 1.0
9 2.0
10 3.0
11 4.0
12 5.0
13 3.0
rolling_mean
La función ha sido modificada en pandas. Si llena todo el conjunto de datos, puede usar;
filled_dataset = dataset.fillna(dataset.rolling(6,min_periods=1).mean())
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)