Python - 如何从三个数据集中查找不匹配的记录

Posted

技术标签:

【中文标题】Python - 如何从三个数据集中查找不匹配的记录【英文标题】:Python - How to find unmatched records from three datasets 【发布时间】:2017-02-14 11:35:24 【问题描述】:

我定义了三个数据帧 df1、df2 和 df3。我需要一种简单的方法来查找 df1、df2 和 df3 之间不匹配的记录。它与这些数据帧的交集相反。如果我将它与 SQL 世界进行比较,它可以通过这三个表之间的左外连接并过滤空列来获得不匹配的记录来实现。这如何在 Python 中轻松完成?

【问题讨论】:

相关:***.com/questions/28901683/… 设置一组并计算差异应该可以解决问题。 【参考方案1】:

如果您想通过数据框的特定列加入,您可以执行以下操作:

indexes = df1[(df1[TARGET_COLUMN]!=df2[TARGET_COLUMN]) | (df1[TARGET_COLUMN]!=df3[TARGET_COLUMN])].index

TARGET_COLUMN 应该是列的名称。

如果您想在整行之间进行比较,您可以使用:

def compare_indexes(x):
    index = x.name
    for column_name in df1.columns.values:
        if not (x[column_name] == df2.iloc[index,:][column_name] == df3.iloc[index,:][column_name]):
            return False
    return True


df1["match"] = df1.apply(compare_indexes, axis=1)
indexes = df1[df1["match"]==False].index

【讨论】:

感谢您的替代方法 希望对您有所帮助。如果性能是一个问题,请注意这种方法在运行时间方面是线性的,并且只在数据帧上迭代两次(一次用于创建匹配列,一次用于选择索引)。【参考方案2】:
merged_df = pd.merge(df1, df2, how='outer', on='[your index]').merge(df3, how='outer', on='[your index]')

result = merged_df.loc[~merged_df.index.isin(merged_df.dropna().index)]

结果就是你想要的。

【讨论】:

以上是关于Python - 如何从三个数据集中查找不匹配的记录的主要内容,如果未能解决你的问题,请参考以下文章

查找大型数据集中子字符串的所有匹配项的(行、列)位置

如何在预测时从测试数据中处理onehotencoding后的类别不匹配?

如何从两个数组集中“检查”匹配的日期

如何从 BigQuery 中存储的大型线串数据集中查找所有道路交叉口

如何预测特征数量是不是与测试集中可用的特征数量不匹配? [复制]

如何从海量数据中找到相似数据--那些用于查找相似数据的哈希算法