Python 如何基于另一个数据帧在数据帧中删除数据

Python 如何基于另一个数据帧在数据帧中删除数据,python,pandas,Python,Pandas,我有一个像这样的数据帧 user_id sku_id time 0 56804 75906 2016-02-01 00:10:48 1 56804 75906 2016-02-01 08:36:59 2 56805 75906 2016-02-01 08:36:59 3 56806 81256 2016-02-01 00:08:15 …… 然后我有另一个数据帧B,如下所示: user_id sku_id 0

我有一个像这样的数据帧

    user_id sku_id    time
0   56804   75906   2016-02-01 00:10:48
1   56804   75906   2016-02-01 08:36:59
2   56805   75906   2016-02-01 08:36:59
3   56806   81256   2016-02-01 00:08:15
……
然后我有另一个数据帧B,如下所示:

    user_id sku_id        
0   56804   75906
1   56806   81256   
……
我想在数据帧A中选择样本,但(用户id,sku id)不在数据帧B中。如何有效地进行选择?因为我的数据比较大,而且我在我的电脑里用有限的内存来做

与参数
指示器一起使用
,用于过滤,然后使用以下命令删除辅助列:

另一个解决方案:

x = pd.MultiIndex.from_arrays([df1['user_id'], df1['sku_id']])
y = pd.MultiIndex.from_arrays([df2['user_id'], df2['sku_id']])
inter = x.difference(y)
df1 = df1.set_index(['user_id', 'sku_id']).loc[inter].reset_index()
print (df1)
   user_id  sku_id                 time
0    56805   75906  2016-02-01 08:36:59

有两种方法可以做到这一点: 1) 使用isin可以删除所需的列。但必须合并两列才能执行此操作:

A["id"] = str(A["user_id"])+"_"+str(A["sku_id"])
B["id"] = str(B["user_id"])+"_"+str(B["sku_id"])
l = list(B["id"])
A2 = A[~A["id"].isin(l)]
2) 在B dataframe中创建另一个字段,即1。您可以使用all条件合并两个数据帧,并删除值为1的字段

B["unique"] = 1
A2 = A.merge(B,on=["user_id","sku_id"],how="outer")
A2 = A2[A2["unique"]!=1]

让我知道这是否有帮助

jez您的速度如此之快。虽然此代码可以回答问题,但提供有关此代码为什么和/或如何回答问题的其他上下文可以提高其长期价值。我建议您检查SO以及来自的全面信息。
df=df1.append(df2)

df.drop_duplicates(subset=['user_id','sku_id'],keep=False)
df=df1.append(df2)

df.drop_duplicates(subset=['user_id','sku_id'],keep=False)