Восстановил ваши данные, но я думаю, что это поможет вам получить то, что вам нужно? Если поле даты было на самом деле datetime в вашей df, сортировка будет отображать фрейм данных в порядке возрастания даты.
df=pd.DataFrame({'department':[0,1,1,1,1,799,799,799,799],'date':['09/2017','01/2018','01/2019','02/2018','02/2019','09/2017','10/2017','11/2017','12/2017'],'id_x':[1,149,112,103,78,57,64,80,79],'id_y':[np.NaN,np.NaN,4.0,1.0,np.NaN,2.0,3.0,np.NaN,2.0]})
df=df.set_index('department')
df2=df.pivot(columns='date',values=['id_x','id_y'])
df3=df2.swaplevel(axis=1)
df3.sort_index(axis=1, level=0, inplace=True)
Выход:
date 01/2018 01/2019 02/2018 ... 10/2017 11/2017 12/2017
id_x id_y id_x id_y id_x ... id_y id_x id_y id_x id_y
department ...
0 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN
1 149.0 NaN 112.0 4.0 103.0 ... NaN NaN NaN NaN NaN
799 NaN NaN NaN NaN NaN ... 3.0 80.0 NaN 79.0 2.0