Я добавил одну строку (на июнь) в ваш тестовый фрейм данных:
Name State Job Code Month
0 Bob CA A APR
1 Joe CA B APR
2 Mary AZ C MAY
3 Bob CA D MAY
4 Bob NV C MAY
5 Bob CA D MAY
6 Bob CA D JUN
Причина заключается в том, чтобы показать, что способ, которым я предоставлял сортировку по календарю, Месяц (вместов алфавитном порядке) работает нормально.
Чтобы обеспечить указанную сортировку по календарю, начните с:
df.Month = pd.Categorical(df.Month, ['JAN', 'FEB', 'MAR', 'APR',
'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'])
Затем почти вся обработка может быть выполнена в следующей инструкции:
res = df.query('Name == "Bob"').drop(columns=['Name'])\
.set_index('Month').stack().reset_index(name='val')\
.groupby(['Month', 'level_1', 'val']).size()\
.sort_index(ascending=[True, False, True]).droplevel(1)
Эта инструкция довольно длинная (включает в себя несколько шагов), поэтому, чтобы понять ее, запустите каждый шаг отдельно и посмотрите промежуточные результаты.
Я писал «почти все» раньше, потому что на данный момент в MultiIndex нет необходимостиимена столбцов.Чтобы очистить их, запустите:
res.index.names = ['', '']
И окончательный результат:
APR CA 1
A 1
MAY CA 2
NV 1
C 1
D 2
JUN CA 1
D 1
dtype: int64
Обратите внимание, что данные для ИЮНЬ равны после МАЙ , как и должно быть.