代码之家  ›  专栏  ›  技术社区  ›  cooldood3490

比较两个pandas数据帧中的两列

  •  0
  • cooldood3490  · 技术社区  · 6 年前

    我有两个熊猫数据框:

    df1:
    a   b   c
    1   1   2
    2   1   2
    3   1   3
    
    df2:
    a   b   c 
    4   0   2 
    5   5   2 
    1   1   2 
    
    df1 = {'a': [1, 2, 3], 'b': [1, 1, 1], 'c': [2, 2, 3]}
    df2 = {'a': [4, 5, 6], 'b': [0, 5, 1], 'c': [2, 2, 2]}
    df1= pd.DataFrame(df1)
    df2 = pd.DataFrame(df2)
    

    我正在寻找一个函数,它将在列中显示df1和df2是否包含相同的值 a .

    在我提供的示例中 df1.a df2.a 都有 a=1 .

    如果df1和df2没有一个条目,其中列中的值 等于,则函数应返回 None False .

    我该怎么做?我试过几种组合 panda.merge

    2 回复  |  直到 6 年前
        1
  •  1
  •   BENY    6 年前

    通过使用 isin any

    def yourf(x,y):
        if any(x.isin(y)):
            #print(x[x.isin(y)])
            return x[x.isin(y)]
        else: 
            return 'No match' # you can change here to None
    
    Out[316]: 
    0    1
    Name: a, dtype: int64
    

    yourf(df1.b,df2.c)
    Out[318]: 'No match'
    
        2
  •  1
  •   busybear Danny Boy150    6 年前

    您可以使用集合交集:

    def col_intersect(df1, df2, col='a'):
        s1 = set(df1[col])
        s2 = set(df2[col])
        return s1 & s2 else None
    

    使用 merge 当你尝试的时候,你可以试试这个:

    def col_match(df1, df2, col='a'):
        merged = df1.merge(df2, how='inner', on=col)
        if len(merged):
            return merged[col]
        else:
            return None