【问题标题】:Python - Finding Row Discrepancies Between Two DataframesPython - 查找两个数据帧之间的行差异
【发布时间】:2017-08-14 21:50:17
【问题描述】:

我有两个列数相同的数据框,d1 和 d2。

注意:d1 和 d2 可能有不同的行数。 注意:d1 和 d2 可能不会被索引到每个数据帧中的同一行。

检查两个数据框是否具有相同数据的最佳方法是什么?

我当前的解决方案包括将两个数据帧附加在一起并删除任何匹配的行。

d_combined = d1.append(d2)
d_discrepancy = d_combined.drop_duplicates(keep=False)
print(d_discrepancy)

我是 python 和 pandas 库的新手。因为我将使用具有数百万行和 8-10 列的数据框,是否有更快、更有效的方法来检查差异?是否还可以显示结果差异行来自哪个初始数据帧?

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    设置

    d1 = pd.DataFrame(dict(A=[1, 2, 3, 4]))
    d2 = pd.DataFrame(dict(A=[2, 3, 4, 5]))
    

    选项 1
    使用pd.merge。我将包含参数indicator=True 以显示数据的来源。

    d1.merge(d2, how='outer', indicator=True)
    
       A      _merge
    0  1   left_only
    1  2        both
    2  3        both
    3  4        both
    4  5  right_only
    

    如果他们有相同的数据,我希望_merge 列对于所有内容都是both。所以我们可以检查

    d1.merge(d2, how='outer', indicator=True)._merge.eq('both').all()
    
    False
    

    在这种情况下,它返回了False,因此不是相同的数据。


    选项 2
    使用drop_duplicates
    您需要确保首先从初始数据帧中删除重复项。

    d1.drop_duplicates().append(d2.drop_duplicates()) \
        .drop_duplicates(keep=False).empty
    

    【讨论】:

      猜你喜欢
      • 2018-07-16
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      相关资源
      最近更新 更多