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.

Comprueba si un valor en una columna existe en otra columna, si es así, copia el valor de otra columna en una nueva columna.

Tengo un archivo csv con las columnas [ID] [Number1] [Number2]

Ahora quisiera comprobar si [Number1] existe en [Number2] y, si es así, quiero copiar el valor de [ID] en una nueva columna [ID2].
He intentado con np.where [Number1] == [Number2], sin embargo, este no es el resultado que quiero, ya que está comprobando fila por fila de los valores. Lo que quiero que haga el script es comprobar si el valor de [Number1] existe en toda [Number2].

Entonces, algo así como un bucle for donde se recorre la fila 1 de [Number1] hasta que se complete toda la columna [Number2] y luego se mueve a la siguiente fila. Es decir, si la fila 1 de [Number1] es 50131 y la fila 5555 de [Number2] es 50131, entonces quiero que el [ID] de la fila 1 se copie en la fila 5555 como [ID2].

Si el valor no existe, me gustaría imprimir la cadena ‘No match’ en la fila.

Entrada:

ID Number1 Number2
9991 123 678
9992 321 321
9993 543 123
9994 678 543
9995 921 001

Resultado esperado: (al comparar Number1 con Number2)

ID Number1 Number2 ID2
9991 123 678 9994
9992 321 321 9992
9993 543 123 9991
9994 678 543 9993
9995 921 001 ‘NO MATCH’
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Se puede usar una combinación de np.where y np.isin para obtener el resultado deseado.

    En primer lugar, se puede utilizar np.where para obtener los índices de los elementos en Number2 que coinciden con los elementos en Number1:

    indices = np.where(np.isin(Number2, Number1))
    

    Luego, se puede utilizar np.take para obtener los valores correspondientes de ID de Number1:

    ID2 = np.take(ID, indices)
    

    Finalmente, se puede utilizar np.where para comprobar si hay elementos en ID2 que son None y reemplazarlos con la cadena de caracteres 'NO MATCH':

    ID2 = np.where(ID2 == None, 'NO MATCH', ID2)
    

    El resultado final debería ser el siguiente:

    ID Number1 Number2 ID2
    9991 123 678 9994
    9992 321 321 9992
    9993 543 123 9991
    9994 678 543 9993
    9995 921 001 ‘NO MATCH’

Comments are closed.