问题提出:有以下两个数据集,df_data、df_FAIL,其中df_data的SN和df_FAIL的SerialNumber的特征是相同的,现在要找出特征在SerialNumber但是不在SN中的集合。
df_data:
df_FAIL:
分析:如果dataframe数据里面有重复,我们只要找不重复的话需要去重:
去重的差集
1. 首先寻找交集
dataframe筛选数据根据某一个列的数据在另外的一个dataframe的列中:
参考链接
#找到交集
df_FAIL_IN = df_FAIL[df_FAIL["SerialNumber"].isin(df_data["SN"])]
2. 取差集(作某个dataframe和交集的差)
#找df_FAIL - df_FAIL_IN 差集
df_FAIL.append(df_FAIL_IN).append(df_FAIL_IN).drop_duplicates(subset=['SerialNumber'],keep=False)
参考链接
解决思路是这样的:
对于有同样Index的a,b两个DataFrame,如果现在要求a对b的差集,那么可以(1)连续两次扩充a,使用append方法(2)然后使用drop_duplicates方法对a进行去重,并且参数keep=False。原理很简单,也很巧妙,连续扩充2次a,那么新扩充完后的DataFrame中来自b的row肯定是重复的,去重时候,b全部被删除,与此同时,a中跟b重复的row也会顺带着被删除。
不去重的差集:
只需要在1的基础上加上~即可。
#找差集
df_FAIL_OUT = df_FAIL[~ df_FAIL["SerialNumber"].isin(df2["SN"])]