在两个数据帧的两列之间查找额外内容-减去

时间:2018-07-31 19:24:21

标签: python pandas dataframe group-by subtraction

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

在更大的数据框中,相同类型的动物比其他动物更多。如何按名称查找相同类型的其他动物? 即(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 个答案:

答案 0 :(得分:1)

您正在寻找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中,用left_only表示。

答案 1 :(得分:1)

使用isin

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