← retour aux snippets

pandas: merge_asof (join temporel)

Faire une jointure as-of (la plus proche dans le passé).

python pandas #pandas#asof#join

objectif

Faire une jointure as-of (la plus proche dans le passé).

code minimal

import pandas as pd

a = pd.DataFrame({"t":pd.to_datetime(["2025-01-01 10:00","2025-01-01 10:05"]), "va":[1,2]})
b = pd.DataFrame({"t":pd.to_datetime(["2025-01-01 10:02","2025-01-01 10:07"]), "vb":[10,20]})
m = pd.merge_asof(a.sort_values("t"), b.sort_values("t"), on="t", direction="backward")
print(m.vb.tolist())

utilisation

import pandas as pd

a = pd.DataFrame({"t":pd.to_datetime(["2025-01-01 10:03"]), "va":[9]})
b = pd.DataFrame({"t":pd.to_datetime(["2025-01-01 10:00","2025-01-01 10:05"]), "vb":[1,2]})
print(pd.merge_asof(a, b, on="t", tolerance=pd.Timedelta("4m")).vb.iloc[0])

variante(s) utile(s)

import pandas as pd

a = pd.DataFrame({"t":pd.to_datetime(["2025-01-01 10:03"]), "va":[9]})
b = pd.DataFrame({"t":pd.to_datetime(["2025-01-01 11:00"]), "vb":[1]})
print(pd.merge_asof(a, b, on="t", direction="forward").vb.isna().all())

notes

  • Trier par la clé temporelle avant merge_asof.