Rellene los datos de pandas faltantes con el valor no faltante anterior, agrupados por clave

Estoy tratando con pandas DataFrames como esto:

id x 0 1 10 1 1 20 2 2 100 3 2 200 4 1 NaN 5 2 NaN 6 1 300 7 1 NaN 

Me gustaría reemplazar cada NAN ‘x’ con la anterior ‘N’ no NAN de una fila con el mismo valor ‘id’:

  id x 0 1 10 1 1 20 2 2 100 3 2 200 4 1 20 5 2 200 6 1 300 7 1 300 

¿Hay alguna forma sencilla de hacer esto sin hacer un bucle manual sobre las filas?

Puede realizar una operación de agrupación / reenvío en cada grupo:

 import numpy as np import pandas as pd df = pd.DataFrame({'id': [1,1,2,2,1,2,1,1], 'x':[10,20,100,200,np.nan,np.nan,300,np.nan]}) df['x'] = df.groupby(['id'])['x'].ffill() print(df) 

rendimientos

  id x 0 1 10.0 1 1 20.0 2 2 100.0 3 2 200.0 4 1 20.0 5 2 200.0 6 1 300.0 7 1 300.0 
 df id val 0 1 23.0 1 1 NaN 2 1 NaN 3 2 NaN 4 2 34.0 5 2 NaN 6 3 2.0 7 3 NaN 8 3 NaN df.sort_values(['id','val']).groupby('id').ffill() id val 0 1 23.0 1 1 23.0 2 1 23.0 4 2 34.0 3 2 34.0 5 2 34.0 6 3 2.0 7 3 2.0 8 3 2.0 

use sort_values, groupby y ffill para que si tiene un valor de Nan para el primer valor o conjunto de primeros valores, también se llenen.