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’ |
davy.ai
Se puede usar una combinación de
np.where
ynp.isin
para obtener el resultado deseado.En primer lugar, se puede utilizar
np.where
para obtener los índices de los elementos enNumber2
que coinciden con los elementos enNumber1
:Luego, se puede utilizar
np.take
para obtener los valores correspondientes deID
deNumber1
:Finalmente, se puede utilizar
np.where
para comprobar si hay elementos enID2
que sonNone
y reemplazarlos con la cadena de caracteres'NO MATCH'
:El resultado final debería ser el siguiente: