у меня есть набор данных, который выглядит так:
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
yg.pivot_table(index='grade', columns='year', values='id',fill_value=0, aggfunc='count').unstack()
? Потому что вы можете просто.loc[2012]
этого результата. - person Brad Solomon   schedule 19.11.2017