Вместо возврата фона для столбца, верните строки:
np.random.seed(1)
df = pd.DataFrame(np.random.randint(0,3, (10,4)),
columns=('hour','col1','col2','col3'))
def highlight(row):
if row['col1'] > row['col2']:
color='red'
elif row['col1'] < row['col2']:
color='green'
else: color = 'yellow'
# notice the difference
# also color:black is not needed, just add because my jupyter style
background=['',f'background-color:{color}; color:black','','']
return background
df.style.apply(highlight,axis=1)
Вывод: