I have a df (df1) that looks like:
df1 = pd.DataFrame([
[\'YYZ\', \'SFO\', 1],
[\'YYZ\', \'YYD\', 1],
[\'YYZ\', \'EWR\', 1],
[\'Y
merge
with indicator=True
query
to strip out only those with 'left_only'
df1.merge(
df2, how='outer', indicator=True
).query('_merge == "left_only"').drop('_merge', 1)
city1 city2 val
2 YYZ EWR 1
3 YYZ DFW 1
4 YYZ LAX 1
5 YYZ YYC 1
the ~ symbol reverses the isin and makes it effectively a isnotin
Just ask the question straight in plain English, hmm I mean in plain pandas. "Select all rows in df1 that are not in df2" translates to:
df1[~df1.isin(df2).all(axis=1)]
Out[127]:
city1 city2 val
2 YYZ EWR 1
3 YYZ DFW 1
4 YYZ LAX 1
5 YYZ YYC 1