一种方法是存储两个df的内部合并结果,然后我们可以简单地在一行的值不在此通用值中时选择行:
In [119]:common = df1.merge(df2,on=['col1','col2'])print(common)df1[(~df1.col1.isin(common.col1))&(~df1.col2.isin(common.col2))] col1 col20 1 101 2 112 3 12Out[119]: col1 col23 4 134 5 14
编辑
你发现的另一种方法是使用isin它将产生NaN可删除的行:
In [138]:df1[~df1.isin(df2)].dropna()Out[138]: col1 col23 4 134 5 14
但是,如果df2不能以相同的方式开始行,那么它将行不通:
df2 = pd.Dataframe(data = {'col1' : [2, 3,4], 'col2' : [11, 12,13]})将产生整个df:
In [140]:df1[~df1.isin(df2)].dropna()Out[140]: col1 col20 1 101 2 112 3 123 4 134 5 14



