Вы почти правильно поняли, вы упускаете одну небольшую вещь в формуле Excel, они должны начинаться с первого ряда, а не со второго. Также не нужно писать два разных утверждения, поскольку ваши условия могут быть вложены только в одно, это более эффективно и читабельно. В общем, попробуйте воспроизвести желаемый результат вручную в Excel, тогда его легко преобразовать в синтаксис xlsxwriter.
Вот рабочий пример:
import pandas as pd
import numpy as np
data = {'Col1': [2, 3, -2, 5],
'Col2': [-5, 6, 7, -8],
'Col3': [np.nan, np.nan, np.nan, np.nan]}
df = pd.DataFrame(data)
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
green = workbook.add_format({'bg_color': '#C6EFCE'})
worksheet.conditional_format('C1:C1048576', {'type': 'formula',
'criteria': '=OR(AND($A1>0,$B1<0),AND($A1<0,$B1>0))',
'format': green})
writer.save()
Вывод: