#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