Сумма значений по группам в Pandas: группировка и агрегация
Быстрый ответ
Для того чтобы получить результат немедленно, примените df.groupby()
в сочетании с .sum()
. Предположим, у вас есть DataFrame df
, и вы хотите сложить значения value_col
по категориям group_col
:
summed_data = df.groupby('group_col')['value_col'].sum()
Если же вы хотите сохранить все столбцы в итоговом DataFrame и получить DataFrame, а не Series, используйте следующий код:
summed_df = df.groupby('group_col', as_index=False).sum()
Этот метод позволяет группировать и подсчитывать данные по одному или нескольким критериям в рамках одной строки кода.
Работа с несколькими столбцами
Если данные нужно сгруппировать по нескольким столбцам, просто перечислите их:
# Группируем данные по 'Name' и 'Fruit', подсчитываем значения в 'Number'
df_summary = df.groupby(['Name', 'Fruit'])['Number'].sum().reset_index()
Использование функции агрегирования
Для более гибкого анализа используйте функцию agg()
. Она поддерживает разные типы агрегаций:
df_summary = df.groupby(['Name', 'Fruit']).agg({'Number': 'sum'}).reset_index()
Знакомство со сводными таблицами
Создание сводных таблиц — это отличный способ получить кросс-табулированные данные, и оно выполняется довольно просто:
pivot_table = df.groupby(['Name', 'Fruit'])['Number'].sum().unstack(fill_value=0)
Таким образом данные конвертируются в таблицу уникальных имен (в роли строк) и фруктов (как столбцы), при этом 'Number' суммируется для каждой пары, а пропущенные данные заполняются нулями.
Визуализация
Представьте себе ситуацию: вы в продуктовом магазине, и у вас в корзине есть разные фрукты с ценниками:
🛒: [🍎$2, 🍎$2, 🍊$3, 🍌$1, 🍌$1, 🍌$1]
Как подсчитать общую стоимость? Давайте сгруппируем фрукты по видам и суммируем их стоимость:
import pandas as pd
data = {'Fruit': ['Apple', 'Apple', 'Orange', 'Banana', 'Banana', 'Banana'],
'Price': [2, 2, 3, 1, 1, 1]}
df = pd.DataFrame(data)
grouped_sum = df.groupby('Fruit')['Price'].sum()
И вот что у вас получилось на чеке:
| Fruit | Total Price |
| ------ | ----------- |
| Apple | $4 |
| Orange | $3 |
| Banana | $3 |
В этом примере GroupBy в Pandas — это ваш умный кассир, который мгновенно подсчитал суммарную стоимость каждого вида фруктов.
Продвинутые возможности и потенциальные трудности
Рассмотрим некоторые более сложные примеры использования и способы решения возникающих проблем:
Суммирование с применением условий
Хотите подсчитать итоговую сумму, исходя из определенного условия? Воспользуйтесь функцией mask
:
df['Number'] = df['Number'].mask(df['Fruit'] == 'Banana', 0)
grouped_conditional_sum = df.groupby('Fruit')['Number'].sum()
Здесь значения 'Number' для всех бананов устанавливаются равными 0 еще до процесса суммирования.
Работа с отсутствующими значениями "NA"
Если в данных есть значения NA, которые вызывают сложности, решите, стоит ли заменить их на другие значения с помощью fillna()
до суммирования:
df['Number'] = df['Number'].fillna(0)
grouped_na_handled_sum = df.groupby('Fruit')['Number'].sum()
Такой подход заменит все значения NA на нули перед их подсчетом.
Повышение производительности
Если вы работаете с большими наборами данных, вы можете оптимизировать использование памяти, изменив типы данных перед процедурой группирования:
df['Number'] = df['Number'].astype('int32')
grouped_memory_optimized_sum = df.groupby('Fruit')['Number'].sum()
Уменьшение типа столбца до int32 экономит память и повышает производительность при суммировании.
Полезные материалы
- pandas.DataFrame.groupby — документация pandas 2.2.0 — Официальное руководство по функции Pandas groupby.
- pandas.DataFrame.sum — документация pandas 2.2.0 — Ваш ключ к освоению функционала суммирования в Pandas.
- Group by: разделяй и властвуй — документация pandas 2.2.0 — Все о том, как разделять, анализировать и объединять данные с помощью Pandas.
- Использование pandas и Python для исследования набора данных – Real Python — Учебное пособие Real Python о работе с данными с использованием pandas.
- Pandas Grouper и функции Agg объяснены – Practical Business Python — Руководство по использованию функций группирования и агрегации Pandas.
- Учебное пособие по Python Pandas (Часть 8): Группировка и агрегирование – анализ и исследование данных – YouTube — Видеоруководство по применению функций группировки и агрегирования в Pandas.