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)