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 😉
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”
Opción 2: “###” + índice de fila
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.