Как сгруппировать фрейм данных, чтобы получить подсчет по двум ключам в Python, используя groupby() в функции

у меня есть набор данных, который выглядит так:

yg = pd.DataFrame({'grade': ['a','a','b','b','a'],
                  'key2': ['one','two','one','two','one'], 
                  'year': (2012,2013,2012,2012,2013),
                  'id': (1101,2212,2331,2432,3464)})

который подсчитывает количество пользователей в каждом году по категориям

yg.groupby(['year','grade']).groups.count()

Кроме того, это моя работа: я пытаюсь создать функцию,

    def User_Grades(data,year):
        g = data.groupby(['year']).get_group(year).groupby(['grade']).size[['a','b']]
    for i in df_groupby(['year']).groups.key():
        print('{}\n'.format(i), 'a:  {}\n'.format(User_Grades(df,i)['a'],'b:  {}\n'.format(User_Grades(df,i)['b'])))

Я хотел бы ввести год, чтобы иметь информацию об этом году, а не обо всех годах. Например,

    User_Grades(yg,['2012'])
    # I would have
    2012
    a :  2
    b :  2

Примечание. Я получил несколько советов по использованию сводной точки в python. Однако вывод pivot отличается от ожидаемого ответа. В сводке нет ':'.

Pivot дает следующий вывод:

YEAR  GRADE         
2012  a                     2
      b                     2
2013  a                     1
      b                     0

Этот формат от свода не ожидается, вместо этого мне нужно это:

2012
a :  2
b :  2
2013
a :  1
b :  0

person user8964444    schedule 19.11.2017    source источник
comment
Также см. stackoverflow.com/questions/47372181/, я только что ответил на этот вопрос несколько минут назад.   -  person cs95    schedule 19.11.2017
comment
@ Брэд Соломон, я не думаю, что пивот сможет точно решить мой вопрос. Есть очевидная разница между выходом. Я по-прежнему считаю, что groupby() — лучший способ решения, но я все еще озадачен.   -  person user8964444    schedule 19.11.2017
comment
@cᴏʟᴅsᴘᴇᴇᴅ это не повторяющийся вопрос. Pivot не может точно решить этот вопрос. Groupby() делает, но я все еще озадачен   -  person user8964444    schedule 19.11.2017
comment
@ user8964444, можете ли вы дать немного больше информации о том, что именно получается? Вы упомянули, что получите такой формат, который на самом деле не похож на формат DataFrame. Если ваш вопрос касается большего, чем просто включение 0-счетов, то да, я думаю, это было бы причиной для повторного открытия.   -  person Brad Solomon    schedule 19.11.2017
comment
Другими словами, как вы хотите, чтобы ваш вывод отличался от yg.pivot_table(index='grade', columns='year', values='id',fill_value=0, aggfunc='count').unstack()? Потому что вы можете просто .loc[2012] этого результата.   -  person Brad Solomon    schedule 19.11.2017
comment
И как я или кто-либо другой может удалить повторяющийся тег этого вопроса? Я новичок на этой платформе. Извини!   -  person user8964444    schedule 19.11.2017
comment
Вы, к сожалению, не можете, я тоже, только всемогущие, такие как @cᴏʟᴅsᴘᴇᴇᴅ, могут. Но это может помочь, если вы ответите на то, о чем я спрашивал выше.   -  person Brad Solomon    schedule 19.11.2017
comment
Я снова отредактировал свой вопрос, надеюсь, он более понятен. я показал свою работу, просто застрял в функции   -  person user8964444    schedule 19.11.2017
comment
@user8964444 не видит сводного решения. См. переиндексацию ниже. Также см. ссылку, которую я разместил.   -  person cs95    schedule 19.11.2017