#python #pandas #sorting #aggregate-functions
#python #pandas #сортировка #агрегатные функции
Вопрос:
У меня есть следующий фрейм данных:
df[['ID','Team']].groupby(['Team']).agg([('total','count')]).reset_index("total").sort_values("count")
В принципе, мне нужно подсчитать количество идентификаторов по команде, а затем отсортировать по общему количеству идентификаторов.
Часть агрегации хороша, и она дает мне ожидаемый результат. Но когда я пытаюсь выполнить сортировку, я получаю это:
KeyError: 'Requested level (total) does not match index name (Team)'
Что я делаю не так?
Комментарии:
1. Попробуйте это df[[‘ID’,’Team’]].groupby([‘Team’]).agg([(‘total’,’count’)]).reset_index().sort_values(«count»)
Ответ №1:
Используйте агрегацию имен для указания имен новых столбцов в агрегатной функции, удалите total
из DataFrame.reset_index
:
df = pd.DataFrame({
'ID':list('abcdef'),
'Team':list('aaabcb')
})
df = df.groupby('Team').agg(count=('ID','count')).reset_index().sort_values("count")
print (df)
Team count
2 c 1
1 b 2
0 a 3
Ваше решение следует изменить, указав столбец после groupby
для обработки, затем укажите новое имя столбца с помощью агрегатной функции в кортеже и, наконец, удалите total
из reset_index
:
df = df.groupby('Team')['ID'].agg([('count','count')]).reset_index().sort_values("count")
print (df)
Team count
2 c 1
1 b 2
0 a 3