как использовать groupby или сводную таблицу в pandas

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных, в котором у меня есть четыре столбца id, оппозиция, подачи и калитки. Я хочу группировать по подачам и оппозициям и хочу получить сумму калитки и количество противников.

считайте, что это мой фрейм данных.

введите описание изображения здесь

и мой требуемый вывод фрейма данных должен быть

введите описание изображения здесь

Столбец «Калитки» представляет собой сумму групп калитки по подачам и противостоянию, а match_play — количество групп противников по противостоянию и подачам.

Я пробовал со сводной таблицей, но получил 'Opposition' not 1-dimensional

 table = inn.pivot_table(values=['Opposition', 'Wickets'], index=['Opposition', 'Inning_no'],
                    aggfunc=['count','sum'])
 

Ответ №1:

Просто используйте для фрейма данных. .groupby() И reset_index() снова преобразовать Opposition и Innings в обычные столбцы (они преобразуются в multiindex во groupby время)

 import pandas as pd

df = pd.DataFrame({'id':[1,2,3,4,5], 'Opposition':['Sri Lanka', 'Sri Lanka', 'UAE','UAE','Sri Lanka'],
                   'Innings':[1,2,1,2,1], 'Wickets':[13,17,14,18,29]})

t = df.groupby(['Opposition', 'Innings'])['Wickets'].agg(Wickets=('sum'),
                                                         Match_play=('count')).reset_index()
print(t)
 

Вывод:

   Opposition  Innings  Wickets  Match_play
0  Sri Lanka        1       42           2
1  Sri Lanka        2       17           1
2        UAE        1       14           1
3        UAE        2       18           1
 

Комментарии:

1. в aggregate() отсутствует 1 требуемый позиционный аргумент: ‘func_or_funcs’

2. Какая у вас версия pandas? ( pip freeze в терминале и ищите pandas)

3. Я исправил это inn.groupby([‘Оппозиция’, ‘Inning_no’])[‘Калитки’].agg([(‘Калитки’, ‘сумма’), (‘Оппозиция’, ‘количество’)])

4. но reset_index() не работает с этим @Mark