设置熊猫中两个数据框的差异

时间:2018-09-07 19:32:06

标签: python pandas dataframe set-difference

我希望有人可以为这个问题的答案提供帮助。之前也曾提出过类似的问题,但是即使是选定的问题,它们的答案也并不完全正确。

我想得到两个熊猫数据帧的设置差异。意思是,df1 - df2等于df1中存在但df2中不存在的行。 df1中但不在df2中的任何行都必须在结果中。共有的行不能出现在结果中。经典集差异定义。

此外,必须忽略索引。这意味着两行的相等性必须由以下条件确定:

1)它们是否具有相同的列名(如果它们包含的数据帧确实具有列名,则满足),

2)如果1为true,那么对于每一列,它们的值是否完全相同(字符串匹配-好的,我们也可以考虑大小写不敏感)

其他问题中的示例都是简化的示例,尽管它们可能在有限的范围内起作用,但并非在所有情况下都适用。请尝试考虑以下情况:列中的值可能不是简单的数据类型,而是列表或元组本身。或者,如果以后有人定义了自定义类型及其equals方法,则解决方案也可以使用这些类型。

1 个答案:

答案 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'])]