Вы можете использовать следующий базовый синтаксис для создания сводной таблицы в pandas, которая отображает сумму значений в определенных столбцах:
pd.pivot_table(df, values='col1', index='col2', columns='col3', aggfunc='sum')
В следующем примере показано, как использовать этот синтаксис на практике.
Пример: создание сводной таблицы Pandas с суммой значений
Предположим, у нас есть следующий кадр данных pandas, который содержит информацию о различных баскетболистах:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
'position': ['G', 'G', 'F', 'F', 'G', 'F', 'F', 'F'],
'points': [4, 4, 6, 8, 9, 5, 5, 12]})
#view DataFrame
print(df)
team position points
0 A G 4
1 A G 4
2 A F 6
3 A F 8
4 B G 9
5 B F 5
6 B F 5
7 B F 12
В следующем коде показано, как создать сводную таблицу в pandas, которая показывает сумму значений «баллов» для каждой «команды» и «позиции» в DataFrame:
#create pivot table
df_pivot = pd.pivot_table(df, values='points', index='team', columns='position',
aggfunc='sum')
#view pivot table
print(df_pivot)
position F G
team
A 14 8
B 22 9
Из вывода мы видим:
- Игроки команды A на позиции F набрали в общей сложности 14 очков.
- Игроки команды А на позиции G набрали в сумме 8 очков.
- Игроки команды B на позиции F набрали в общей сложности 22 очка.
- Игроки команды B на позиции G набрали в сумме 9 очков.
Обратите внимание, что мы также можем использовать аргумент margin для отображения сумм маржи в сводной таблице:
#create pivot table with margins
df_pivot = pd.pivot_table(df, values='points', index='team', columns='position',
aggfunc='sum', margins= True , margins_name='Sum')
#view pivot table
print(df_pivot)
position F G Sum
team
A 14 8 22
B 22 9 31
Sum 36 17 53
В сводной таблице теперь отображаются суммы строк и суммы столбцов.
Примечание.Полную документацию по функции pandas pivot_table() можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:
Pandas: как изменить форму DataFrame с длинного на широкий
Pandas: как изменить форму DataFrame с широкого на длинный
Pandas: как группировать и агрегировать по нескольким столбцам