Вот еще один способ решения этого вопроса:
df1[~df1.index.isin(df1.merge(df2, how='inner', on=['col1', 'col2']).index)]
Или:
df1.loc[df1.index.difference(df1.merge(df2, how='inner', on=['col1', 'col2']).index)]
Похоже, библиотека area
хочет только геометрию, а не весь объект. Попробуйте вместо этого:
for x in bdry['features']:
print(area(x['geometry']))