一、列表:
一般两个列表取不同我们常用列表推导式:
A = [1,2,3,4]
B = [3,4,5,6]
提取两列表相同元素:
both = [i for i in A if i in B]
提取A特有的元素:
diff_A = [i for i in A if i not in B]
提取A,B各自独有的元素:
diff_both = [i for i in (A+B) if i not in both]
当然还可使用集合的特性进行筛选,更加的简便: 并集(|),交集(&),差集(-)
如提取A,B各自独有的元素,即对称集:
set(A)^set(B)
二、数据框
实现的方法很多,其中一个方法就是取出两个数据框需要比较的列,利用上面介绍的方法得到不同的元素,然后从数据框中取出这部分。 例如有如下数据框,需要得到df1与df2相比,df1中独有部分 然后利用merge函数达成目的: 这里总结出一个更加简单的方法:
def data_diff(df1,df2):
'''
df: 返回df1的index中不包含df2 index部分
'''
df = pd.merge(left=df1, right=pd.DataFrame(df2.index,columns=["ID"]),how="left",indicator=True,left_index=True,right_on="ID")
df = df.loc[df._merge == "left_only",:].drop(columns=["_merge","ID"])
return df
当然这里是匹配的index,可根据实际情况做相应的调整,两行代码实现比较两数据框的不同。
|