我希望有人可以为这个问题的答案提供帮助。之前也曾提出过类似的问题,但是即使是选定的问题,它们的答案也并不完全正确。
我想得到两个熊猫数据帧的设置差异。意思是,df1 - df2
等于df1
中存在但df2
中不存在的行。 df1
中但不在df2
中的任何行都必须在结果中。共有的行不能出现在结果中。经典集差异定义。
此外,必须忽略索引。这意味着两行的相等性必须由以下条件确定:
1)它们是否具有相同的列名(如果它们包含的数据帧确实具有列名,则满足),
2)如果1为true,那么对于每一列,它们的值是否完全相同(字符串匹配-好的,我们也可以考虑大小写不敏感)
其他问题中的示例都是简化的示例,尽管它们可能在有限的范围内起作用,但并非在所有情况下都适用。请尝试考虑以下情况:列中的值可能不是简单的数据类型,而是列表或元组本身。或者,如果以后有人定义了自定义类型及其equals
方法,则解决方案也可以使用这些类型。
答案 0 :(得分:0)
您可以尝试对行进行哈希处理,然后检查
例如。
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'])]