这个问题在这里已有答案:
我希望有人可以帮助解决这个问题。之前已经提出了类似的问题,但他们的答案并不完全正确,即使是选定的答案。
我想得到两个Pandas数据帧的设置差异。意思是,df1 - df2
等于在df1
中存在但在df2
中不存在的行。 df1
中但df2
中没有的任何行必须在结果中。共同的行不得在结果中。经典集差异定义。
此外,必须忽略指数。这意味着必须通过以下方式确定两行的相等性:
1)它们是否具有相同的列名(如果它们包含数据帧,则满足)和
2)如果1为真,那么对于每一列,它们的值是否完全相同(字符串匹配 - 好吧,我们也可以考虑不区分大小写)
其他问题中的示例是简化的,虽然它们可能在有限的范围内工作,但它们并不适用于所有情况。请尝试考虑列中的值可能不是简单数据类型,而是列表或元组本身的情况。或者,如果有人后来定义了自定义类型及其equals
方法,则该解决方案也适用于这些类型。
您可以尝试散列行然后检查
防爆。
df1['match'] = df.apply(lambda x: hash(tuple(x)), axis=1)
df2['match'] = df2.apply(lambda x: hash(tuple(x)), axis=1)
df_diff = df1[~df1['match'].isin(df2['match'])]