А есть ли способ чтобы работало так: если не будут совпадение по col1, то будет merge по col2 ?
Наверно в два захода. Сначала смерждить слева по col1, потом результирующий датафрейм отфильтровать там где isnull откажется по примердженным колонкам. Выделить этот кусок с nan в отдельный фрейм и дропнуть колонки с null, а затем смерждить этот кусок уже по col2