pandas.pivot_table#
Create a spreadsheet-style pivot table as a DataFrame.
The levels in the pivot table will be stored in MultiIndex objects (hierarchical indexes) on the index and columns of the result DataFrame.
Parameters data DataFrame values column to aggregate, optional index column, Grouper, array, or list of the previous
If an array is passed, it must be the same length as the data. The list can contain any of the other types (except list). Keys to group by on the pivot table index. If an array is passed, it is being used as the same manner as column values.
columns column, Grouper, array, or list of the previous
If an array is passed, it must be the same length as the data. The list can contain any of the other types (except list). Keys to group by on the pivot table column. If an array is passed, it is being used as the same manner as column values.
aggfunc function, list of functions, dict, default numpy.mean
If list of functions passed, the resulting pivot table will have hierarchical columns whose top level are the function names (inferred from the function objects themselves) If dict is passed, the key is column to aggregate and value is function or list of functions.
fill_value scalar, default None
Value to replace missing values with (in the resulting pivot table, after aggregation).
margins bool, default False
Add all row / columns (e.g. for subtotal / grand totals).
dropna bool, default True
Do not include columns whose entries are all NaN. If True, rows with a NaN value in any column will be omitted before computing margins.
margins_name str, default ‘All’
Name of the row / column that will contain the totals when margins is True.
observed bool, default False
This only applies if any of the groupers are Categoricals. If True: only show observed values for categorical groupers. If False: show all values for categorical groupers.
Changed in version 0.25.0.
Specifies if the result should be sorted.
New in version 1.3.0.
An Excel style pivot table.
Pivot without aggregation that can handle non-numeric data.
Unpivot a DataFrame from wide to long format, optionally leaving identifiers set.
Wide panel to long format. Less flexible but more user-friendly than melt.
Reference the user guide for more examples.
This first example aggregates values by taking the sum.
We can also fill missing values using the fill_value parameter.
The next example aggregates by taking the mean across multiple columns.
We can also calculate multiple types of aggregations for any given value column.
How to use Pandas Pivot Table? Guide for beginners
Many people have extensive experience using the Pivot Tables in MS Excel. Pandas Pivot Tables use a similar way of work as spreadsheets in Excel. This function helps us with summarizing, aggregating as well as calculating data.
Pandas Pivot Tables are very popular among data analysts because it facilitates work with data while allowing for a high degree of flexibility.
In this article, I will focus on explaining Pandas Pivot Table and how to use it for data analysis. I will focus exclusively on the essential features that are associated with the Pivot Tables.
Table of Contents
- Terminology
- How to make a Pivot Table?
Terminology of Pivot Table
Pivot Tables are a way of calculating grouped summary statistics. It is very common with the GroupBy() method.
We should take a look at the syntax of the Pivot Table:
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc=’mean’, fill_value=None, margins=False, dropna=True, margins_name=’All’, observed=False)
The most commonly used parameters are the following:
Data: this parameter defines the name of DataFrame
Index: it enables the grouping of your data and appears as an index in the Pivot table
Columns: it is column or columns used for aggregating the values
Values: display aggregated features summarized in columns
Aggfunc: list of functions to aggregate data by
How to make a Pivot Table?
Using Pivot Table in Pandas is simple and straightforward. In the beginning, it takes relevant data as input and groups it into a two-dimensional table providing a summarization of this data.
Let's start! First of all, import relevant libraries.
Then, we load following dataset and show the first five rows. We use dataset about students performance in exams.
At the first example we will use only index to specify what feature should go in rows.
B) Multi-level Index
We can go even deeper and set two indexes, seen below.
C) Default Agreggation Function
I consider it necessary to mention that in the case where there is no aggregation function, the system will use the default aggregate function np.mean().
It means that in the picture above are calculated the average values of math, reading and writing scores.
In the picture below, you can see the same values when entering np.mean().
D) Adding Column Parameter
At the next stage, we can add another parameter — column.
E) Adding Value Parameter
Once we use value here, we can specify which kind of features to aggregate on. It should be noted that value parameter is optional and we do not have to specify it.
F) Adding Aggregation Function
What do we do if we want to change the mean function to another aggregate function?
Сводные таблицы в Pandas — швейцарский нож для аналитиков
Привет, Хабр! Меня зовут Панчин Денис, это мой первый пост и я хочу Вам рассказать о работе с сводными таблицами в Pandas. Сводные таблицы хорошо известны всем аналитикам по Excel. Это прекрасный инструмент, который помогает быстро получить различную информацию по массиву данных. Рассмотрим реализацию и тонкости сводных таблиц в Pandas.
Блокнот можно открыть здесь.
Использовать будем только столбцы ‘region’ (субъект РФ), ‘municipality’ (муниципальное образование), ‘year’ (год), ‘birth’ (число родившихся на 1000 человек населения), ‘wage’ (cреднемесячная номинальная начисленная заработная плата, руб.). Сразу оговорюсь, что Москва и Санкт-Петербург являются отдельными субъектами Российской Федерации и в этом датафрейме отсутствуют.
Минимальную статистику можно получить использовав метод describe(include = ‘all’). Мы видим что у нас 4109 строки, по 81 региону и 202 городам. Средняя рождаемость на 1000 человек 11,39, минимальная — 3,4, максимальная — 36,1.
Агрегирование
Если объяснять простыми словами, то агрегирование — это процесс приведения некого большого массива значений к некому сжатому по определенному параметру массиву значений. Например, среднее, медиана, количество, сумма.
Groupby
Но средняя температура по больнице нам не интересна, мы хотим знать победителей в лицо. Допустим нам нужно посмотреть средние значения с группировкой по городам и субъектам РФ. Для этого закономерно используем метод groupby([‘region’, ‘municipality’]).agg(‘mean’).
Обратите внимание, что колонки region и municipality стали индексами.
На этом мы не успокаиваемся и пытаемся выжать больше стат.данных: среднее, медиану, минимум, максимум.
Посмотрим топ городов по зарплатам.
А что если посмотреть данные в разрезе по годам.
Pivot table
Ответим на этот вопрос чуть позже, а пока создадим сводную таблицу аналогичную той, что мы уже делали ранее.
Уже на этом этапе видно, что сводная таблица достаточно умная и сама агрегировала данные и посчитала средние значения.
Но если мы захотим расширить таблицу новыми значениями — медианой, то увидим, что конечный результат по структуре будет отличаться от того, что мы делали при использовании метода groupby.
Так мы плавно подошли к тем преимуществам, которые делает сводные таблицы швейцарским ножом для аналитиков. Если используя groupby мы «укрупняли» строки по городам, то сейчас мы можем «развернуть» столбец, например, ‘year’ (год) и посмотреть данные в разрезе по годам.
И, конечно, данные в сводной таблице можно фильтровать. Создадим сводную таблицу и оставим в ней данные по городам, в которых рождаемость на 1000 человек превышает 12, зарплата выше 40.000 и отсортируем всё по убыванию рождаемости.
Pivot
Всё было замечательно, но в Pandas кроме pivot_table есть ещё просто pivot. Посмотрим что это за зверь и чем они отличаются.
Создадим pivot: рождаемость в разрезе по регионам и годам.
Мы получили ошибку «Index contains duplicate entries, cannot reshape«. Что-то не так с индексами, попробуем создать pivot с индексами по городам, а не регионам.
Всё получилось. Как мы уже заметили всё дело в индексах. На самом деле всё в повторяющихся индексах. Как мы видели ранее в датафрейме есть позиции с несколькими городами в рамках одного субъекта, так получаются дублированные данные индексов с которыми не умеет работать pivot.
Вывод
Groupby, pivot и pivot_table удобные и привычные инструменты для работы с данными. Groupby позволяет кодом в одну строку получить агрегированные и сортированные данные, а pivot и pivot_table работать в более глубоком разрезе. Pivot_table предпочтителен, т.к. не ограничивает вас в уникальности значений в столбце индекса. И, конечно, все эти данные можно фильтровать под ваши запросы.
С помощью какого метода можно построить сводную таблицу в pandas
Продолжаем изучать самые полезные возможности библиотеки Pandas для анализа данных. Рассмотрим метод groupby, сводные таблицы и построим пару простых графиков.
1. Загрузка и документация
Загрузим те же данные, что использовались на первом занятии, в датафрейм. На этот раз помимо пути к файлу пропишем еще пару параметров к методу read_csv(), которые часто бывают нужны: delimiter (разделитель) и encoding (кодировка). Данные в файлах в формате CSV (comma-separated values) по умолчанию разделены запятыми, но могут быть и другие разделители — точка с запятой, пробел, любой символ. Если это не запятая, тогда такой разделитель нужно прописать в параметре delimiter. Также бывает нужно прописать стандартную кодировку utf-8, чтобы файл открылся без ошибок.
У методов в Pandas может быть очень много параметров. У метода read_csv(), например, их 50.
Запомнить их все почти нереально, поэтому очень полезно и удобно обращаться к документации на официальном сайте, где описаны все методы, их возможности и параметры.
2. Информация по столбцам
Вспомним, как выглядит наш датафрейм. Это данные по смертности населения 204 стран и территорий от разных причин с 2000 по 2019 год (источник: Global Burden of Disease Study 2019 Results. Seattle, United States: Institute for Health Metrics and Evaluation (IHME)).
Основные столбцы: location — страна или территория, sex — пол, cause — причина смерти, year — год, val — показатель смертности (число смертей на 100 000 жителей), upper и lower — верхняя и нижняя граница оценки показателя смертности (мы их не будем использовать).
Вспомним, сколько в нем столбцов и строк.
Метод describe() показывает статистику по всем числовым столбцам.
Но зачастую столько показателей бывает не нужно, и требуется посмотреть информацию только по одному столбцу. Это очень легко сделать как для числового столбца, так и нечислового. Для числового можно посчитать среднее, минимальное, максимальное, медиану и пр.
Для нечислового, например, число уникальных значений и сколько записей им соответствуют.
3. Сортировка и топы значений
Вспомним, как отсортировать датафрейм по какому-то значению.
Иногда бывает удобно не сортировать весь датафрейм, а только посмотреть самые крупные и мелкие значения. Для этого есть методы nlargest() и nsmallest(). В параметрах можно задать число (сколько строк нужно вывести) и название столбца.
На первом месте смертность от несчастных случаев в Гаити в 2010 году. Тогда там произошло разрушительное землетрясение.
Если отфильтровать датафрейм только по 2019 году, в топе будет смертность от сердечно-сосудистых заболеваний в Болгарии.
В первом уроке мы не упомянули очень удобный метод для фильтрации датафрейма — isin(), поэтому рассмотрим его сейчас. Он нужен, когда в столбце нам требуется не одно значение, а несколько. Например, так можно выбрать сразу несколько стран в столбце location.