某些列的pandas DataFrames之间的差异

时间:2014-07-01 23:53:26

标签: python pandas dataframe

我正在寻找一种方法来识别一个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

2 个答案:

答案 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