df = df.pivot_table(index=['class', 'colour', 'step_name'], columns='title',
    aggfunc=len, values='participant', fill_value=0).reset_index().rename_axis(
    None, axis=1)
Pandas - Как сгруппировать и разложить по нескольким переменным?