Open in Colab


telegram

Сводная таблица - это мощный инструмент для обобщения и представления данных.

В Pandas есть функция DataFrame.pivot_table(), которая позволяет быстро преобразовать DataFrame в сводную таблицу.

Обобщенная схема работы функции pivot_table:

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

В этом Блокноте рассказывается, как использовать pivot_table.

Полный текст оригинальной статьи находится здесь.

В этом сценарии я собираюсь отслеживать воронку (план) продаж (также называемую воронкой, funnel). Основная проблема заключается в том, что некоторые циклы продаж очень длинные (например, "корпоративное программное обеспечение", капитальное оборудование и т.д.), и руководство хочет отслеживать их детально в течение года.

Типичные вопросы, относящиеся к таким данным, включают:

Прочтите данные о нашей воронке продаж в DataFrame:

Для удобства давайте представим столбец Status как категориальную переменную (category) и установим порядок, в котором хотим просматривать.

Это не является строго обязательным, но помогает поддерживать желаемый порядок при работе с данными.

Поворот данных

Создавать сводную таблицу (pivot table) проще всего последовательно. Добавляйте элементы по одному и проверяйте каждый шаг, чтобы убедиться, что вы получаете ожидаемые результаты.

Самая простая сводная таблица должна иметь DataFrame и индекс (index). В этом примере давайте использовать Name в качестве индекса:

У вас может быть несколько индексов. Фактически, большинство аргументов pivot_table могут принимать несколько значений в качестве элементов списка:

Это интересно, но не особо полезно.

Мы хотим посмотреть на эти данные со стороны менеджера (Manager) и директора (Director). Это достаточно просто сделать, изменив индекс:

Вы могли заметить, что сводная таблица достаточно умна, чтобы начать агрегирование данных и их обобщение, группируя представителей (Rep) с их менеджерами (Manager). Теперь мы начинаем понимать, что может сделать для нас сводная таблица.

Давайте удалим счет (Account) и количество (Quantity), явно определив столбцы, которые нам нужны, с помощью параметра values:

Столбец цен (price) по умолчанию усредняет данные, но мы можем произвести подсчет количества или суммы. Добавить их можно с помощью параметра aggfunc:

aggfunc может принимать список функций.

Давайте попробуем узнать среднее значение и количество:

Если мы хотим увидеть продажи с разбивкой по продуктам (Product), переменная columns позволяет нам определить один или несколько столбцов.

Я думаю, что одна из сложностей pivot_table - это использование столбцов (columns) и значений (values).

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

Функции агрегирования применяются к перечисленным значениям (values):

Значения NaN немного отвлекают. Если мы хотим их убрать, то можем использовать параметр fill_value, чтобы установить в 0.

Думаю, было бы полезно добавить количество (Quantity).

Добавьте количество (Quantity) в список значений values:

Что интересно, вы можете добавлять элементы в индекс, чтобы получить другое визуальное представление.

Добавим товары (Products) в индекс.

Для этого набора данных такое представление имеет больше смысла.

А что, если я хочу увидеть некоторые итоги? margins=True делает это за нас.

Давайте переместим анализ на уровень выше и посмотрим на наш план продаж (воронку) на уровне менеджера.

Обратите внимание на то, как статус упорядочен на основе нашего предыдущего определения категории.

Очень удобно передать словарь в качестве aggfunc, чтобы вы могли выполнять разные функции с каждым из выбранных значений. Это имеет побочный эффект - названия становятся немного чище:

Вы также можете предоставить список агрегированных функций (aggfunctions), которые будут применяться к каждому значению:

Может показаться сложным собрать все это сразу, но как только вы начнете играть с данными и медленно добавлять элементы, то почувствуете, как это работает.

Мое общее практическое правило заключается в том, что после использования нескольких группировок (grouby) вы должны оценить, является ли сводная таблица (pivot table) полезным подходом.

Расширенная фильтрация сводной таблицы

После того, как вы сгенерировали свои данные, они находятся в DataFrame, поэтому можно фильтровать их, используя обычные методы DataFrame.

Если вы хотите посмотреть только на одного менеджера:

Мы можем просмотреть все незавершенные (pending) и выигранные (won) сделки:

Я надеюсь, что этот пример показал вам, как использовать сводные таблицы в собственных наборах данных.

Шпаргалка

Схема с примером из Блокнота: