Python 基于行级别2个不同数据帧的公共列的isin

Python 基于行级别2个不同数据帧的公共列的isin,python,pandas,Python,Pandas,我有两个数据帧。例如: DF1: ID Val1 VAl2 123 a d 234 b e 345 c f DF2: ID Val1 VAl2 234 b d 345 c f 567 k l 123 b d 我想基于ID比较DF2和DF1的行(相同ID值的索引在两个DFs中不同),并得到如下输出: Output: ID Val1 VAl2 NaN NaN d NaN NaN NaN 567 k l NaN

我有两个数据帧。例如:

DF1:

ID  Val1 VAl2
123  a    d
234  b    e
345  c    f

DF2:

ID  Val1 VAl2
234  b    d
345  c    f
567  k    l
123  b    d
我想基于ID比较DF2和DF1的行(相同ID值的索引在两个DFs中不同),并得到如下输出:

Output:

ID   Val1 VAl2
NaN  NaN  d
NaN  NaN  NaN
567  k    l
NaN  b    NaN
因此,基于ID的任何值相似的地方都填充为NaN,不同的值按原样填充

我尝试使用:

DF2[~DF2.isin(DF1)]
但它基于数据帧的索引进行比较

我还尝试:

DF2.isin(DF1.values.ravel())
但是,它在数据帧中的单个值级别进行比较


谢谢

设置索引,然后使用
eq

df1.set_index('ID').eq(df2.set_index('ID'))
      Val1   VAl2
ID               
123  False   True
234   True  False
345   True   True
567  False  False

与mask类似的逻辑给出了几乎预期的输出:
df2.set_index('ID')。mask(df1.set_index('ID')。eq(df2.set_index('ID'))。reset_index()
:)@anky_91感谢您的响应。非常接近我要找的东西。我还希望将ID设置为NaN,只要DF1中存在DF2 ID。