寻找两个dataframe中相同关键列中元素的差集
问题
有以下两个数据集,df1、df2,其中df1的VendorName和df2的VendorName的特征是相同的,现在要找出特征在df1中但是不在df2中的集合。
#找到交集
df_transactions_IN = df_transactions[df_transactions["VendorName"].isin(df_approved["VendorName"])]
#找df_1 - df_2 差集
df_unapproved = df_transactions.append(df_transactions_IN).append(df_transactions_IN).drop_duplicates(subset=['VendorName'],keep=False)
#找差集,不去重的差集
df_FAIL_OUT = df_FAIL[~ df_FAIL["SerialNumber"].isin(df2["SN"])]
解决思路是这样的:
对于有同样Index的a,b两个DataFrame,如果现在要求a对b的差集,那么可以(1)连续两次扩充a,使用append方法(2)然后使用drop_duplicates方法对a进行去重,并且参数keep=False。原理很简单,也很巧妙,连续扩充2次a,那么新扩充完后的DataFrame中来自b的row肯定是重复的,去重时候,b全部被删除,与此同时,a中跟b重复的row也会顺带着被删除。