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

在两个数据帧的两列之间查找额外项-减法[重复]

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

    这个问题已经有了答案:

    我有两个数据帧(df_a和df_b),有两列:“动物”和“名称”。

    在更大的数据框架中,同一类型的动物比其他类型的多。我怎样才能找到名字相同类型的额外动物? 即(df_a-df_b)

    数据帧A

    Animal  Name
    dog     john
    dog     henry
    dog     betty
    dog     smith
    cat     charlie
    fish    tango
    lion    foxtrot
    lion    lima
    

    数据帧B

    Animal  Name
    dog     john
    cat     charlie
    dog     betty
    fish    tango
    lion    foxtrot
    dog     smith
    

    在这种情况下,额外的将是:

    Animal  Name
    dog     henry
    lion    lima
    

    尝试:我尝试使用

    df_c = df_a.subtract(df_b, axis='columns')
    

    但出现以下错误:“不支持-:'unicode'和'unicode'的操作数类型”,这是有意义的,因为它们是字符串而不是数字。还有别的办法吗?

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

    left_only

    merged = pd.merge(df_a,df_b, how='outer', indicator=True)
    merged.loc[merged['_merge'] == 'left_only'][['Animal', 'Name']]
    

        Animal  Name
    1   dog    henry
    7   lion    lima
    

    merged = pd.merge(df_a,df_b, how='outer', indicator=True)
    

      Animal    Name    _merge
    0   dog     john    both
    1   dog     henry   left_only
    2   dog     betty   both
    3   dog     smith   both
    4   cat     charlie both
    5   fish    tango   both
    6   lion    foxtrot both
    7   lion    lima    left_only
    

    df_a

        2
  •  1
  •   BENY    6 年前

    isin

    df1[~df1.sum(1).isin(df2.sum(1))]
    Out[611]: 
      Animal   Name
    1    dog  henry
    7   lion   lima