Вы можете выполнить внешнее слияние на ['num1', 'num2', 'num3']
и сохранить столбец class
только с df2
(поэтому сбросьте class
с df1
):
df12 = (df1.merge(df2, on=['num1', 'num2', 'num3'], how = 'outer')
.fillna(0)
.drop('class_x', axis=1))
>>> df12
# num1 num2 num3 class_y
# 0 1 2 3 1.0
# 1 1 2 4 1.0
# 2 1 2 5 0.0
# 3 2 2 4 0.0
Редактировать : как подсказывает @ cᴏʟᴅsᴘᴇᴇᴅ, сначала немного убрать class
из df1
, а затем выполнить слияние:
df12 = (df1.drop('class', 1)
.merge(df2, how='left')
.fillna(0)
.astype({'class' : int}))