es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Función de ventana de PySpark para comprobar, basado en una condición, una fila de lag.

Necesitaría tomar (si está presente y es el último) STAT 200.
Me gustaría tomar su fecha solo si es el último estado y para este caso sé cómo hacerlo, está bien.

Pero primero necesito comprobarlo (si no es el último estado) y luego,
si no fuera el último, me gustaría considerar la fecha del último estado como 200 pero solo si el siguiente estado no es menor (por ejemplo, 150 como en el siguiente caso). En este caso no me interesaría considerarlo.

¿Cómo hacerlo en PySpark? Muchas gracias

ID STAT TIME
1 100 17/11/2021
1 200 18/11/2021
1 150 19/11/2021
1 100 20/11/2021
2 200 20/11/2021

En este caso no quiero considerar el ID 1 (estado 150 < 200). Así que solo tomo el ID 2.

ID STAT TIME
1 100 17/11/2021
1 200 18/11/2021
1 350 19/11/2021
1 400 20/11/2021
2 200 20/11/2021

En este caso quiero considerar el estado 200 y sus detalles (estado 350> 200 para el ID 1; solo 200 para el ID 2).

¡Gracias por el apoyo!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Con PySpark, puedes lograr esto utilizando las funciones filter y orderBy.

    Primero, puedes filtrar el dataframe para incluir solo las filas con STAT igual a 200:

    python
    df = df.filter(df.STAT == 200)

    Luego, puedes ordenar el dataframe por ID y TIME en orden descendente:

    python
    df = df.orderBy(df.ID.desc(), df.TIME.desc())

    Finalmente, puedes utilizar las funciones groupBy y agg para obtener el último TIME para cada ID:

    python
    df = df.groupBy("ID").agg(F.max("TIME").alias("TIME"))

    El dataframe resultante contendrá el último TIME para cada ID con un STAT igual a 200.

Comments are closed.