python : How to compare two data frames

标签 python pandas dataframe

我有两个数据框:

df1

A1    B1
1     a
2     s
3     d

df2

A1    B1
1     a
2     x
3     d

我想比较 B1 列上的 df1 和 df2。 A1 列可用于连接。我想知道:

  1. 相对于 B1 列,df1 和 df2 中哪些行不同?
  2. 如果 A1 列的值不匹配。例如,df2 是否缺少 df1 中存在的某些值,反之亦然。如果有,是哪些?

我尝试使用合并和加入,但这不是我要找的。

最佳答案

我编辑了原始数据以说明 A1 键在一个数据框中的情况,但在另一个数据框中没有。

在进行合并时,您希望指定“外部”合并,以便您可以在一个数据框中看到这些带有 A1 键的项目,但在另一个数据框中看不到。

我添加了后缀“_1”和“_2”来指示 B1 列的数据帧源(_1 = df1 和 _2 = df2)

df1 = pd.DataFrame({'A1': [1, 2, 3, 4], 'B1': ['a', 'b', 'c', 'd']})
df2 = pd.DataFrame({'A1': [1, 2, 3, 5], 'B1': ['a', 'd', 'c', 'e']})

df3 = df1.merge(df2, how='outer', on='A1', suffixes=['_1', '_2'])
df3['check'] = df3.B1_1 == df3.B1_2

>>> df3
   A1 B1_1 B1_2  check
0   1    a    a   True
1   2    b    d  False
2   3    c    c   True
3   4    d  NaN  False
4   5  NaN    e  False

检查 df1df2 中缺少的 A1 键:

# A1 value missing in `df1`
>>> d3[df3.B1_1.isnull()]
   A1 B1_1 B1_2  check
4   5  NaN    e  False

# A1 value missing in `df2`
>>> df3[df3.B1_2.isnull()]
   A1 B1_1 B1_2  check
3   4    d  NaN  False

编辑 感谢@EdChum(所有 Pandas 知识的来源...)。

df3 = df1.merge(df2, how='outer', on='A1', suffixes=['_1', '_2'], indicator=True)
df3['check'] = df3.B1_1 == df3.B1_2

>>> df3
   A1 B1_1 B1_2      _merge  check
0   1    a    a        both   True
1   2    b    d        both  False
2   3    c    c        both   True
3   4    d  NaN   left_only  False
4   5  NaN    e  right_only  False

关于 python : How to compare two data frames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161091/

相关文章:

python - 从旧数据框创建子列

python - 如何提取字符串中整数值的第二个实例

Python、Twisted、Django、reactor.run() 导致问题

Python 调试器 (pdb) 停止处理向上/向下箭头,而是显示 ^[[A

python - 按名称和来源重新采样 pandas 数据框

python-3.x - 如何从数据框中获取系列(列),并将(column_name/row_name/1)作为新(日期)索引

scala - 如何在scala中将元组列表转换为数据框

python - 我的华氏度到摄氏度/开尔文转换器有问题

python - 过滤 content_object django 评论

python - Python/Pandas 中按位运算符的 any() 和 all() 类似物