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.

Utilice el índice de fila del DataFrame como entrada para el resultado de la función lambda.

Tengo un gran dataframe, df_vol. Tiene alrededor de 20 columnas y 500k filas. En la columna llamada “FTID”, tres de los valores son “###”. Aparte de esas tres instancias, cada otro valor en la columna “FTID” es único. Quiero buscar y cambiar cada instancia de “###” para que sea única. Cualquiera de estas dos opciones sería aceptable: 1. “###1”, “###2”, “###3”, o 2. “###” + str(row_index) para cada uno, es decir, concatenar “###” con el índice de fila.

El código que he intentado es:

df_vol[“FTID”] = df_vol[“FTID”].apply(lambda x: “###” if x == “###” else None)

Sé que el código anterior en realidad no cambia nada, pero no sé cómo hacer que solo obtenga el índice de fila o use un número incremental. He intentado tantas cosas diferentes, pero soy un novato y estoy apuñalando en la oscuridad. Me parece que debería verse así:

df_vol[“FTID”] = df_vol[“FTID”].apply(lambda x: “###” + df_vol.index.astype(str) if x == “###” else None)

pero el poco éxito que he tenido solo devuelve algo como esto para los nuevos valores:

Int64Index([423, 424, 425, 426, 427, 428, 429, 430,

Ahora voy a recoger todo mi cabello y ver si puedo pegarlo de nuevo en mi cabeza 😉

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para cambiar cada instancia de “###” a un valor único, ya sea como “###1”, “###2”, “###3” o “###” con el índice de fila concatenado, puede utilizar el siguiente código:

    Opción 1: “###1”, “###2”, “###3”

    # encontrar filas con "###"
    mask = df_vol["FTID"] == "###"
    
    # crear un contador único para cada fila con "###"
    counter = mask.cumsum()
    
    # reemplazar "###" con "###" + contador como cadena
    df_vol.loc[mask, "FTID"] = "###" + counter.astype(str)
    

    Opción 2: “###” + índice de fila

    # encontrar filas con "###"
    mask = df_vol["FTID"] == "###"
    
    # reemplazar "###" con "###" + índice de fila como cadena
    df_vol.loc[mask, "FTID"] = "###" + df_vol.loc[mask].index.astype(str)
    

    Ambas opciones utilizan la máscara booleana para identificar las filas con “###”. La opción 1 utiliza una suma acumulada de la máscara como un contador único para cada fila con “###”, y la opción 2 utiliza el índice de fila como valor único para cada fila con “###”. Se utiliza el método loc para actualizar la columna “FTID” con los nuevos valores.

Comments are closed.