我有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'”,这是有道理的,因为它们是字符串而不是数字。还有其他办法吗?
答案 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