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。