Tengo el siguiente marco de datos: df
name width length
timestamp
2019-08-01 00:00:08 10 10.0 NaN
2019-08-01 00:00:19 10 NaN NaN
2019-08-01 00:00:56 10 NaN 86.0
2019-08-01 00:00:08 12 NaN 90
2019-08-01 00:00:19 12 12.0 NaN
2019-08-01 00:00:28 12 NaN NaN
Me gustaría aplicar el relleno hacia adelante y hacia atrás en las columnas 'ancho' y 'longitud' dentro de la columna 'nombre'. El resultado se vería así:
name width length
timestamp
2019-08-01 00:00:08 10 10.0 86
2019-08-01 00:00:19 10 10.0 86
2019-08-01 00:00:56 10 10.0 86
2019-08-01 00:00:08 12 12.0 90
2019-08-01 00:00:19 12 12.0 90
2019-08-01 00:00:28 12 12.0 90
¿Alguna idea de como hacer esto?
2
Jeroen
26 feb. 2020 a las 19:18
2 respuestas
La mejor respuesta
Necesitamos groupby
con apply
, ya que encadenamos dos funciones ffill
y bfill
juntas
df.update(df.groupby('name').apply(lambda x : x.ffill().bfill()))
2
YOBEN_S
26 feb. 2020 a las 16:28
Como dijiste que cada name
único tiene un solo valor de width
y length
, puedes evitar apply
usando transform
y {{X5} } o first
df.update(df.groupby('name')[['width','length']].transform('max'))
Out[87]:
name width length
timestamp
2019-08-01 00:00:08 10 10.0 86.0
2019-08-01 00:00:19 10 10.0 86.0
2019-08-01 00:00:56 10 10.0 86.0
2019-08-01 00:00:08 12 12.0 90.0
2019-08-01 00:00:19 12 12.0 90.0
2019-08-01 00:00:28 12 12.0 90.0
1
Andy L.
26 feb. 2020 a las 17:36
Preguntas relacionadas
Nuevas preguntas
python-3.x
Para preguntas sobre la programación de Python que son específicas de la versión 3+ del lenguaje. Use la etiqueta [python] más genérica en todas las preguntas de Python, y solo agregue esta si su pregunta es específica de la versión. Utilice las etiquetas [python-2.x] para las preguntas de Python 2.