Reemplaza un punto 2D en un dataframe con un punto 2D en otro dataframe si la distancia Euclidiana entre ellos es la más baja.
Tengo un dataframe df1 con dos columnas V1 y V2 que representan dos coordenadas de un punto.
df1
V1 V2
1.30344679 0.060199021
1.256628917 0.095897457
0.954959945 0.237514922
1.240081297 0.053228255
1.35765432 0.033412217
1.228539425 0.079924064
1.080489363 0.204162117
1.27587021 0.085286683
1.44 0
0.93719247 0.310292371
Hay otro dataframe df2 con dos columnas C1 y C2 que representan dos coordenadas de un punto.
df2
C1 C2
0.083 0.323657888
1.293934451 0.046950426
1.252872503 0.09000528
0.148131303 0.347930828
df1 y df2 tienen longitudes diferentes. En este ejemplo, habrá sustituciones para cuatro puntos en df1. Básicamente, cuatro puntos en df2 reemplazan cuatro puntos en df1 si la distancia euclidiana entre ellos es la más baja.
También podemos decir que cada punto en df2 reemplaza solo el punto más cercano en df1. ¿Cómo podemos lograr esto?
Problema de duplicados: El número de dígitos después del decimal es 9. Por lo tanto, supongo que no surgirá el problema de duplicados (es decir, más de un punto en df1 tiene la misma distancia euclidiana y el valor de distancia es el más bajo). Si ocurre, ¿podemos reemplazar una fila al azar?
Resultado deseado: df1 revisado del mismo tamaño que df1 pero con cuatro puntos de df2 reemplazados.
davy.ai
Para lograr esto, podemos calcular la distancia euclidiana entre cada punto en df1 y cada punto en df2, y luego reemplazar el punto más cercano en df1 con el punto correspondiente en df2.
Aquí está el proceso paso a paso para lograr esto:
Nota: En caso de un empate (es decir, más de un punto en df1 tiene la misma distancia euclidiana y el valor de distancia es el más bajo), podemos reemplazar cualquier una de las filas al azar.