Не удается отсортировать значения после агрегации с использованием фрейма данных Pandas

#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