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是的,应该是,谢谢,我会更新的