A better code to achieve what you need is:
df = pd.DataFrame({'time':['13:30', '9:20', '18:12', '19:00', '11:20', '13:30',
'15:20', '17:12', '16:00', '8:20'],
'item': ["coffee", "bread", "pizza", "rice", "soup", "coffee", "bread", "pizza", "rice", "soup"]})
df['hour'] = df.time.apply(lambda x: int(x.split(':')[0]))
df['meal'] = np.where((df.hour >= 6) & (df.hour < 11), 'breakfast',
np.where((df.hour>=11) & (df.hour < 15), 'lunch', 'dinner'))
df = df.groupby(['meal',
'item']).size().rename('count').to_frame().reset_index().pivot(columns=['meal'])
df.columns = df.columns.swaplevel(0,1)
df.sort_index(axis=1, level=0, inplace=True)
df.sort_values(by=('breakfast', 'count'), inplace=True)
df
breakfast dinner lunch
count item count item count item
0 1.0 bread NaN NaN NaN NaN
1 1.0 soup NaN NaN NaN NaN
2 NaN NaN 1.0 bread NaN NaN
3 NaN NaN 2.0 pizza NaN NaN
4 NaN NaN 2.0 rice NaN NaN
5 NaN NaN NaN NaN 2.0 coffee
6 NaN NaN NaN NaN 1.0 soup
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…