df[(~df.duplicated()) | (df['col'].isnull())]
# drop duplicate rows having the least null values
# (assuming 'col_1' is the column from which you want to remove the duplicates)
new_df = df.sort_values(by=list(df.columns), na_position='last').drop_duplicates('col_1', keep='first')