Python 将一个数据帧的两列数据与另一个数据帧的两列数据进行比较,找出不匹配的数据

Python 将一个数据帧的两列数据与另一个数据帧的两列数据进行比较,找出不匹配的数据,python,pandas,dataframe,Python,Pandas,Dataframe,我有如下数据帧df1- 第二个数据帧df2如下- 我希望得到的数据帧如下 Dataframe df1和df2包含大量的列和数据,但这里我展示了示例数据。我的目标是将df1的Customer和ID列与df2的Customer和Part Number进行比较。比较是为了发现df1['Customer']和df1['ID']与df2['Customer']和df2['Part Number']的数据不匹配。最后将不匹配的数据存储到另一个数据帧df3。例如:ID为(89ab)的客户(rishab)

我有如下数据帧
df1
-

第二个数据帧df2如下-

我希望得到的数据帧如下

Dataframe df1和df2包含大量的列和数据,但这里我展示了示例数据。我的目标是将df1的Customer和ID列与df2的Customer和Part Number进行比较。比较是为了发现df1['Customer']和df1['ID']与df2['Customer']和df2['Part Number']的数据不匹配。最后将不匹配的数据存储到另一个数据帧
df3
。例如:ID为(89ab)的客户(rishab)出现在df1中,但不在
df2
中。因此,客户、订单和零件存储在
df3

我正在使用
isin()
方法查找一列的
df1
df2
不匹配,但无法对两列进行比较

df3 = df1[~df1['ID'].isin(df2['Part Number'].values)]


#here I am only able to find mismatch based upon only 1  column ID but I want to include Customer also
我也可以使用循环,但是数据非常大(时间复杂度会增加),我确信可以有一个线性代码来完成这个任务。我也尝试过使用merge,但无法生成准确的输出


那么,如何产生这个精确的输出呢?我也不能对两列使用
isin()
,我认为
isin()
不能对两列使用您可以尝试外部联接以获得不匹配的行。类似于
df3=df1.merge(df2,左上=['Customer','ID',右上=['Customer','partnumber','how=“outer”)
实现这一点的最简单方法是:

df3 = df1.merge(df2, left_on = ['Customer', 'ID'],right_on= ['Customer', 'Part Number'],  how='left', indicator=True)
df3.reset_index(inplace = True)
df3 = df3[df3['_merge'] == 'left_only']

在这里,您首先在列上执行一个
左连接
,并将
indicator=True
,这将给出另一个列,如_merge,其中的indicator提到数据存在的哪一侧,然后我们从中选择
left\u only

如果您以一种易于导入的方式提供示例数据,这将更容易回答,请参见@Wouter-sure。。。我将以可复制的熊猫为例进行编辑。谢谢你的回答。这也将考虑第二数据帧DF2的数据。但我只希望df3中的df1不匹配。DF2 DATAFRAM是非常LAT=RGE,大约包含50000个ROWSCAN,请建议只考虑与第二DATAFRAMCEN的第一个数据帧不匹配的代码。您尝试这个代码> DF3= DF1。在哪里((DF1.客户!= DF2.Customer)和(DF1.ID!= DF2. PARTIONE))< /代码>当然我会尝试…但不知道哪种解决方案会产生最终的精确结果。谢谢你的回答。你能告诉我为什么这里使用df_3吗。我想最后一行一定是df3是的,应该是,谢谢,我会更新的