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 中存储的大型线串数据集中查找所有道路交叉口