【问题标题】:Compare two dfs and print the values that are not present in one比较两个 dfs 并打印其中不存在的值
【发布时间】:2023-01-03 06:37:38
【问题描述】:

我有两个数据框,我想比较两者并打印 df1 中不存在的值。 例子:

df1 = |id|check_column1| |21|abc| |21||公元前| |22|hqo| |22|高速| |23|米诺|

df2 =

|id|check_column1| |21|abc| |22|hqo| |23|xyz|

我想要输出为 |id|check_column1|chack_colum2| |23|mno|xyz|

我不希望输出包含 21-bcd 和 22-hsd,它们的值已经存在于 df1 中。如果 df1 中有 2 个值,而 df2 中有 1 个值,则表示相同的 id,我不想将该 id 视为未匹配项。

df = pd.merge(df1,df2,left_on =['id',df1.groupby('id').cumcount()], right_on = ['id',df2.groupby('id').cumcount()] )

但这给出了我想要的所有未命中匹配项,它们在两个表中都完全不同

【问题讨论】:

    标签: python pandas dataframe group-by merge


    【解决方案1】:

    考虑这个设置:

    import pandas as pd
    
    df1 = pd.DataFrame(
        {"id": [21, 21, 22, 22, 23], "check_column1": ["abc", "bcd", "hqo", "hsd", "mno"]}
    )
    #    id check_column1
    # 0  21           abc
    # 1  21           bcd
    # 2  22           hqo
    # 3  22           hsd
    # 4  23           mno
    df2 = pd.DataFrame(
        {"id": [21, 22, 23, 23], "check_column1": ["abc", "hqo", "xyz", "www"]}
    )
    #    id check_column1
    # 0  21           abc
    # 1  22           hqo
    # 2  23           xyz
    # 3  23           www
    

    如何为每个 id、每个数据帧创建一个 set,然后计算相应 ID 的数据帧之间的集合差异?像这样:

    g1 = df1.groupby("id").agg(set)
    g2 = df2.groupby("id").agg(set)
    diffs = pd.concat([g1 - g2, g2 - g1], axis=1)
    diffs.columns = ["check_column1", "check_column2"]
    #    check_column1 check_column2
    # id                            
    # 21         {bcd}            {}
    # 22         {hsd}            {}
    # 23         {mno}    {xyz, www}
    

    这允许只选择在 df2 中有一些值但不在 df1 中的行:

    df = diffs[diffs["check_column2"] != set()]
    #    check_column1 check_column2
    # id                            
    # 23         {mno}    {xyz, www}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 2017-07-30
      • 2023-03-06
      相关资源
      最近更新 更多