python - Rellene NaN según el valor anterior de la fila
pandas (2)
IIUC, una solución rápida sin reformar los datos:
df.iloc[:,::2] = df.iloc[:,::2].ffill(1)
df.iloc[:,1::2] = df.iloc[:,1::2].ffill(1)
df
Salida:
A B C D E F
0 3 4 3 4 3 4
1 9 8 9 8 9 8
2 5 9 4 7 4 7
3 5 7 6 3 6 3
4 2 6 4 3 4 3
Tengo un marco de datos (muestra, no real):
df =
A B C D E F
0 3 4 NaN NaN NaN NaN
1 9 8 NaN NaN NaN NaN
2 5 9 4 7 NaN NaN
3 5 7 6 3 NaN NaN
4 2 6 4 3 NaN NaN
Ahora quiero llenar los valores de NaN con los pares anteriores (!!!) valores de fila (llenar Nan con el par de números existentes y aplicar a toda la fila) y aplicar esto a todo el conjunto de datos.
- Hay muchas respuestas sobre el llenado de las columnas. Pero en este caso, necesito llenar según las filas.
- También hay respuestas relacionadas con el llenado de NaN basadas en otra columna, pero en mi caso el número de columnas es más de 2000. Estos son datos de muestra
La salida deseada es:
df =
A B C D E F
0 3 4 3 4 3 4
1 9 8 9 8 9 8
2 5 9 4 7 4 7
3 5 7 6 3 6 3
4 2 6 4 3 4 3
La idea es remodelar DataFrame para posibles rellenos de los valores faltantes hacia adelante y hacia atrás con la
stack
y el módulo y la división entera de
2
de la matriz por la longitud de las columnas:
c = df.columns
a = np.arange(len(df.columns))
df.columns = [a // 2, a % 2]
#if possible some pairs missing remove .astype(int)
df1 = df.stack().ffill(axis=1).bfill(axis=1).unstack().astype(int)
df1.columns = c
print (df1)
A B C D E F
0 3 4 3 4 3 4
1 9 8 9 8 9 8
2 5 9 4 7 4 7
3 5 7 6 3 6 3
4 2 6 4 3 4 3
Detalle :
print (df.stack())
0 1 2
0 0 3 NaN NaN
1 4 NaN NaN
1 0 9 NaN NaN
1 8 NaN NaN
2 0 5 4.0 NaN
1 9 7.0 NaN
3 0 5 6.0 NaN
1 7 3.0 NaN
4 0 2 4.0 NaN
1 6 3.0 NaN