← Все курсы · Курс Python

pandas.pivot_table: сводная таблица Excel, записанная

Майкл Носито · Обновлено в августе 2026 г. · Все числа на этой странице были обработаны до их публикации.

Каждый, кто использовал Excel, знает, что такое сводная таблица. pivot_table — это та же операция, в которой варианты выбора записаны, а не перетаскиваются, что означает, что она повторяется в следующем месяце, и никто не запоминает, куда пошли поля.

Что вы делаете: назовите четыре вещи. Строки, столбцы, значение и способы его агрегирования. Четвертый имеет значение по умолчанию, которое вам почти никогда не понадобится.

Краткая версия. aggfunc по умолчанию означает. Передавайте это явно, каждый раз.

Стол

import pandas as pd

df = pd.DataFrame({
    'order_id': [101, 102, 103, 104, 105, 106, 107, 108],
    'region':   ['North','North','South','South','East','West','West','East'],
    'month':    ['Jan','Feb','Jan','Feb','Jan','Jan','Feb','Feb'],
    'amount':   [120, 80, 200, 50, 300, 90, 60, 150],
    'status':   ['shipped','shipped','cancelled','shipped',
                 'shipped','pending','shipped','cancelled'],
})

Четыре аргумента

df.pivot_table(index='region', columns='month', values='amount',
               aggfunc='sum', fill_value=0, margins=True, margins_name='Total')
РегионфевральЯнОбщий
Восток150300450
Север80120200
Юг50200250
Запад6090150
Общий3407101050

Четыре аргумента делают свое дело. index это строки, columns это столбцы, values это число, aggfunc что с этим делать. fill_value заменяет НЭН в комбинациях, которые никогда не встречались, и margins добавляет итоги.

Обратите внимание на порядок столбцов: с февраля до января, потому что pandas сортирует значения столбцов в алфавитном порядке и понятия не имеет, что это месяцы. Исправление этого — отдельный шаг ниже.

По умолчанию, который ловит всех. Оставлять aggfunc и вы получите среднее значение. В этой таблице Восток превращается из 450 в 225, и в результате получается идеально отформатированная сводка чисел, которые не соответствуют вашим запросам. Ничто не ошибается, потому что стремление к среднему является вполне законным.

Значение заполнения — это решение

Отсутствующая комбинация — это не то же самое, что ноль. Если бы у Уэста действительно не было февральских приказов, fill_value=0 честен. Если данные за февраль еще не загружены, ноль — это сфабрикованное наблюдение, которое будет отображаться как реальный месяц без продаж.

Если вы не уверены, оставьте НаН. Оно видно, оно передается посредством арифметических вычислений и вызывает вопрос. Это тот же аргумент, что и в Филна и Дропна.

Несколько значений, несколько агрегаций

df.pivot_table(index='region', values=['amount', 'order_id'],
               aggfunc={'amount': 'sum', 'order_id': 'count'})

Словарь позволяет каждому столбцу иметь свою собственную функцию, благодаря которой вы получаете сумму и количество одновременно. Передача списка, например aggfunc=['sum','mean'] применяет каждую функцию к каждому столбцу значений и создает многоуровневый индекс столбца, который является мощным и трудным для чтения. Предпочитаю словарь.

Исправление порядка столбцов

months = ['Jan','Feb','Mar','Apr','May','Jun',
          'Jul','Aug','Sep','Oct','Nov','Dec']
df['month'] = pd.Categorical(df['month'], categories=months, ordered=True)

df.pivot_table(index='region', columns='month', values='amount',
               aggfunc='sum', observed=True)

Если сделать столбец категориальным с определенным порядком, то сортировка будет исправлена ​​повсюду в pandas, а не только в этой сводной таблице: это также исправит порядок группировки и порядок оси диаграммы. Это правильное исправление, а не последующая переиндексация результата.

Возвращаясь к долгому

wide = df.pivot_table(index='region', columns='month',
                      values='amount', aggfunc='sum').reset_index()

long = wide.melt(id_vars='region', var_name='month', value_name='amount')

Широкий — для чтения, длинный — для вычислений. Библиотеки диаграмм, базы данных и другие средства группировки — все это нужно долго. Поворот в самый последний момент, непосредственно перед тем, как на него посмотрит человек.

сводная таблица, Сводная_таблица и группировка

Использовать Когда примечание
groupbyАгрегирование, пребывание надолгоВыбор по умолчанию
pivot_tableОбъединение и расширениеОбрабатывает дубликаты, объединяя их.
pivotТолько изменение формы, без агрегацииВозникает, если пара индекса и столбца повторяется.
crosstabПодсчет комбинаций двух полейСокращение для точки подсчета

pivot сбой при поиске дубликатов - это особенность. Это означает, что ваш ключ не был уникальным, что является тем же самым фактом, что и разветвление в SQL-соединении, и лучше услышать об этом, чем молча усреднять его.

Как применить это в своей работе

  1. Проходить aggfunc явно в каждой сводной таблице, которую вы пишете, даже если значение по умолчанию оказывается правильным.
  2. Прежде чем поверить в какой-либо поворотный момент, сверьте общий итог с разгруппированной суммой.
  3. Решите сознательно, является ли пустая ячейка нулем или неизвестным.
  4. Установите для месяца и других упорядоченных текстовых столбцов значение «Категорический» один раз во время загрузки.
  5. Храните данные в конвейере долго и сводите их только для отображения.

Единственная привычка, которую нужно сохранить

Совместите угол. Нижняя правая ячейка сводной таблицы с полями должна равняться сумме исходного столбца, а если это не так, то по пути что-то было отфильтровано, отброшено или усреднено.

Соответствует ли общая сумма вашей последней сводной таблицы итоговой сумме необработанного столбца?

Каждый номер здесь был проведён до того, как был опубликован. на pandas 3.0.2. Сводная точка возвращает Восток 450, Север 200, Юг 250, Запад 150 с общим количеством столбцов 340 и 710 и общим количеством 1050.
Разворот кода — это поворот, который кто-то другой может повторить в следующем месяце.

Python для аналитиков — это рабочая книга по аналитике pandas: прочитайте файл, исправьте его типы, сгруппируйте его, присоединитесь к нему и проверьте ответ, прежде чем его увидит кто-либо еще.

Python для аналитиков, 19 $ →
Просверлите его на достаточно маленьком столе, чтобы проверить.

pandas.groupby это вторая половина той же идеи, сводные таблицы Excel это версия, которую большинство читателей уже знают, и программа тренировок применяет и то, и другое на практике.

Читать группу pandas →