In [4]:
left.merge(right, on='key', how='outer', indicator=True)\
    .query('_merge != "both"')\
    .drop(columns=['_merge'])
Out[4]:
key value_x value_y
2 c 3.0 NaN
3 d NaN 4.0