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.

Cómo eliminar todas las filas debajo de una coincidencia de cadena en un dataframe.

Tengo un dataframe y solo me interesa los datos por encima del texto de cadena = “purchase” por sesión.

sesión Fecha acción flag_compra
T001 01-01-2021 00.01 clic 1
T001 01-01-2021 00.15 reproducción 1
T001 01-01-2021 02.15 pausa 1
T001 01-01-2021 03.15 reproducción 1
T001 01-01-2021 04.15 compra 1
T001 02-01-2021 10.15 reproducción 1
T001 02-01-2021 12.00 pausa 1
T001 02-01-2021 13.15 reproducción 1
T002 01-01-2021 00.01 reproducción 0
T002 03-01-2021 00.15 reproducción 0
T002 03-01-2021 02.15 pausa 0
T002 03-01-2021 03.15 reproducción 0

Quiero eliminar todas las filas por debajo de la acción = “compra”. Si todas las acciones en la sesión no tienen coincidencias de texto, se mantendrán todas las filas, por lo que la salida que deseo se ve así:

sesión Fecha acción flag_compra
T001 01-01-2021 00.01 clic 1
T001 01-01-2021 00.15 reproducción 1
T001 01-01-2021 02.15 pausa 1
T001 01-01-2021 03.15 reproducción 1
T001 01-01-2021 04.15 compra 1
T002 01-01-2021 00.01 reproducción 0
T002 03-01-2021 00.15 reproducción 0
T002 03-01-2021 02.15 pausa 0
T002 03-01-2021 03.15 reproducción 0
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el resultado deseado, podemos utilizar el siguiente código en Python utilizando pandas:

    import pandas as pd
    
    # leer el dataframe de entrada
    df = pd.read_csv("input.csv")
    
    # crear una máscara booleana donde se mantienen las filas por encima del string "purchase"
    mask = df.groupby("session")["action"].transform(lambda x: (x < "purchase").all())
    
    # aplicar la máscara al dataframe para mantener solo las filas relevantes
    final_df = df[mask]
    
    # guardar el dataframe final en un nuevo archivo CSV
    final_df.to_csv("output.csv", index=False)
    

    En el código anterior, primero leemos el dataframe de entrada desde un archivo CSV. Luego, creamos una máscara booleana utilizando groupby en la columna session y aplicamos una función lambda que verifica si todos los valores de action en una sesión están por debajo del string “purchase”. Utilizamos el método transform para aplicar esta función a cada grupo en la columna session. Finalmente, aplicamos la máscara al dataframe para mantener solo las filas relevantes y guardamos el dataframe final en un nuevo archivo CSV.

Comments are closed.