我正在寻找一种方法来识别一个DataFrame
中不存在于另一个DataFrame
中的行的子集,而只需比较几列。
例如,
df1 = DataFrame([dict(id1=1, id2='ABC', val=23.45), dict(id1=2, id2='MNO', val=21.23)])
df2 = DataFrame([dict(id1=1, id2='ABC', val=42.45)])
# pseudo code
diff_df = df1 - df2 # compare only by id1 & id2, as a pair
>>> diff_df
id1 id2 val
1 2 MNO 21.23
答案 0 :(得分:4)
例如:
df1[~ (df1.id1.isin(df2.id1) & df1.id2.isin(df2.id2))]
id1 id2 val
1 2 MNO 21.23
答案 1 :(得分:0)
我采取了几个步骤来实现目标,所以可能有一点优化:
matches = df1[['id1', 'id2']].drop_duplicates().isin(df2[['id1', 'id2']])
not_present = ~ matches.all(axis=1)
df1.ix[not_present]
Out[16]:
id1 id2 val
1 2 MNO 21.23