我的df(df1)看起来像:
df1 = pd.DataFrame([
['YYZ', 'SFO', 1],
['YYZ', 'YYD', 1],
['YYZ', 'EWR', 1],
['YYZ', 'DFW', 1],
['YYZ', 'LAX', 1],
['YYZ', 'YYC', 1]
], columns=['city1', 'city2', 'val'])
我有另一个df(df2)是df1的一个子集:
df2 = pd.DataFrame([
['YYZ', 'SFO', 1],
['YYZ', 'YYD', 1]
], columns=['city1', 'city2', 'val'])
我希望df1中的所有行都不在df2中。
我已经尝试了这篇文章conditional slicing based on values of 2 columns中描述的各种选项,但是我还没有能够让它发挥作用。
我们将不胜感激。
答案 0 :(得分:5)
merge
与indicator=True
query
仅剥离'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
答案 1 :(得分:3)
用简单的英语直接问问题,嗯,我的意思是普通的熊猫。 “选择df1中不在df2中的所有行”转换为:
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
答案 2 :(得分:0)
〜符号反转isin并使之有效地成为isnotin