Вы могли бы сделать
df.Cat1 = np.where(df.Cat1.isnull(), df.Cat2, df.Cat1)
. Общая конструкция в RHS использует тройственный паттерн из pandas поваренной книги (который он платит, чтобы читать в любом случае). Это векторная версия a? b: c.
pandas
a? b: c