← retour aux snippets

pandas: indicator, anti/semi-join

Repérer l'appartenance via merge(indicator=True).

python pandas #pandas#merge#join

objectif

Repérer l’appartenance via merge(indicator=True).

code minimal

import pandas as pd
a = pd.DataFrame({"id":[1,2,3]})
b = pd.DataFrame({"id":[2,3]})
m = a.merge(b, on="id", how="left", indicator=True)
print(m["_merge"].value_counts().to_dict()[ "both" ])

utilisation

import pandas as pd
a = pd.DataFrame({"id":[1,2,3]})
b = pd.DataFrame({"id":[2]})
anti = a.merge(b, on="id", how="left", indicator=True).query("_merge=='left_only'").drop(columns=["_merge"])
print(anti["id"].tolist())

variante(s) utile(s)

import pandas as pd
a = pd.DataFrame({"id":[1,2,3]})
b = pd.DataFrame({"id":[2]})
semi = a.merge(b, on="id", how="inner").drop_duplicates()
print(semi["id"].tolist())

notes

  • Anti-join: left_only; Semi-join: inner + drop_duplicates.