Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何比较两个数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python:如何比较两个数据帧

Python:如何比较两个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧: df1 A1 B1 1 a 2 s 3 d 及 我想比较B1列上的df1和df2。列A1可用于连接。我想知道: 关于B1列,df1和df2中的哪些行不同 如果列A1的值不匹配。例如,df2是否缺少df1中的某些值,反之亦然。如果是的话,是哪些 我尝试使用合并和联接,但这不是我想要的。我编辑了原始数据,以说明一个数据帧中的A1键,而不是另一个 进行合并时,您希望指定一个“外部”合并,以便可以在一个数据帧(而不是另一个数据帧)中看到具有A1键的这些

我有两个数据帧:

df1

A1    B1
1     a
2     s
3     d

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

  • 关于B1列,df1和df2中的哪些行不同
  • 如果列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
    
    要检查
    df1
    df2
    中是否缺少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(所有熊猫知识的来源…)


    我已经编辑了原始数据,以说明一个数据帧中的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
    
    要检查
    df1
    df2
    中是否缺少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(所有熊猫知识的来源…)


    1. <代码>df1['B1']==df2['B1']2。由于我不清楚你的意思,你能解释并公布你想要的结果吗<代码>df1['B1']==df2['B1']2。您能否解释并发布所需的输出,因为我不清楚您的意思。如果使用最新版本的pandas,您可以使用并通过
    indicator=True
    添加一列,以显示行是否仅在左、右、右三个方向都是完美的!似乎正是我需要的。小问题。当我在我的数据上尝试它时,我看不到缺少的行。其中一个数据帧中存在一些记录,它们在合并后不会显示。但是,您的解决方案与您在此处提供的测试数据完美配合。我不知道为什么会这样?我正在从一些csv文件中读取数据。您可能需要在有问题的地方发布数据,这可能是一个新问题。@EdChum是否有办法比较多个列?如果使用pandas的最新版本,您可以使用并传递
    indicator=True
    来添加一列,以显示该行是否仅在左、右、右三个方向都是完美的!似乎正是我需要的。小问题。当我在我的数据上尝试它时,我看不到缺少的行。其中一个数据帧中存在一些记录,它们在合并后不会显示。但是,您的解决方案与您在此处提供的测试数据完美配合。我不知道为什么会这样?我正在从一些csv文件中读取数据。您可能需要在有问题的地方发布数据,可能是一个新问题。@EdChum有没有办法比较多列?