【发布时间】:2018-09-07 19:32:06
【问题描述】:
我希望有人可以帮助回答这个问题。以前也有人问过类似的问题,但他们的答案并不完全正确,即使是选定的。
我想获得两个 Pandas 数据框的差异。意思是,df1 - df2 等于存在于df1 中但不存在于df2 中的行。任何在df1 中但不在df2 中的行都必须在结果中。共同的行不能出现在结果中。经典集差定义。
此外,必须忽略索引。这意味着必须通过以下方式确定两行的相等性:
1) 它们是否具有相同的列名(如果它们包含的数据框相同,则满足)以及,
2) 如果 1 为真,每一列的值是否完全相同(字符串匹配 - 好吧,我们也可以考虑不区分大小写)
其他问题中的示例是简化的示例,虽然它们可能在有限的范围内起作用,但它们并不适用于所有情况。请尝试考虑列中的值可能不是简单数据类型,而是列表或元组本身的情况。或者,如果后来有人定义了自定义类型及其 equals 方法,则该解决方案也适用于这些类型。
【问题讨论】:
-
您是否考虑与我们分享您要比较的dfs示例?
-
可能有一些连接,可能使用覆盖所有列的复合键。请显示示例数据,以使其成为 MCVE。只是一些小而有代表性的东西。另外 1) 有点无关紧要, df1 中的所有行都将具有相同的列。而且您的要求“必须忽略索引”可能是个坏主意,我们可能需要一个复合行索引,以便我们可以检测到相等性。 “其他问题中的示例......并不适用于所有情况。”这太笼统了,您没有提供任何 MCVE。我们真的应该对所有字符串列进行不区分大小写的匹配吗?比较不同的编码?
标签: python pandas dataframe set-difference