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.

pasando múltiples condiciones “on” en merge_asof

¿Hay alguna manera de pasar múltiples condiciones “on” a “merge_asof” con tolerancias similares o diferentes?

Consideremos “df1” como:

by1 by2 on1 on2
a 1 1.1 1.2
b 2 1.3 1.4
a 3 1.5 1.6

y “df2” como:

by1 by2 on1 on2
a 1 2.1 2.2
x 9 1.3 1.4
a 3 2.5 6.6

Con una tolerancia de 1 para “on1” y 2 para “on2”, quiero realizar una fusión de esta manera:

by1 by2 on1 on2
a 1 2.1 2.2

He probado otros métodos además de “merge_asof”, como bucles anidados, los cuales definitivamente no son eficientes en términos de tiempo. Actualmente estoy utilizando este código que solo funciona para una de mis condiciones “on”, en este caso, “on1”:

df1 = df1.sort_values(“on1”)
df2 = df2.sort_values(“on1″)

df3 = pd.merge_asof(df1, df2, on=”on1”, by=[“by1”, “by2″], tolerance=ToleranceFor1, direction=”nearest”)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible pasar múltiples condiciones on a merge_asof con tolerancias similares o diferentes especificando una lista de columnas para el parámetro on. Por ejemplo, si desea fusionar basándose en las columnas “on1” y “on2”, puede pasar la lista [“on1”, “on2”] al parámetro on:

    df1 = df1.sort_values(["on1", "on2"])
    df2 = df2.sort_values(["on1", "on2"])
    tolerances = {"on1": 1, "on2": 2}
    df3 = pd.merge_asof(df1, df2, on=["on1", "on2"], by=["by1", "by2"], tolerance=tolerances, direction="nearest")
    

    En este ejemplo, utilizamos un diccionario tolerances para especificar tolerancias diferentes para “on1” y “on2”. La función merge_asof intentará encontrar el valor más cercano dentro de la tolerancia especificada para cada columna en el parámetro on.

Comments are closed.