pandas.pivot_table: сводная таблица Excel, записанная
Каждый, кто использовал 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')
| Регион | февраль | Ян | Общий |
|---|---|---|---|
| Восток | 150 | 300 | 450 |
| Север | 80 | 120 | 200 |
| Юг | 50 | 200 | 250 |
| Запад | 60 | 90 | 150 |
| Общий | 340 | 710 | 1050 |
Четыре аргумента делают свое дело. 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-соединении, и лучше услышать об этом, чем молча усреднять его.
Как применить это в своей работе
- Проходить
aggfuncявно в каждой сводной таблице, которую вы пишете, даже если значение по умолчанию оказывается правильным. - Прежде чем поверить в какой-либо поворотный момент, сверьте общий итог с разгруппированной суммой.
- Решите сознательно, является ли пустая ячейка нулем или неизвестным.
- Установите для месяца и других упорядоченных текстовых столбцов значение «Категорический» один раз во время загрузки.
- Храните данные в конвейере долго и сводите их только для отображения.
Единственная привычка, которую нужно сохранить
Совместите угол. Нижняя правая ячейка сводной таблицы с полями должна равняться сумме исходного столбца, а если это не так, то по пути что-то было отфильтровано, отброшено или усреднено.
Соответствует ли общая сумма вашей последней сводной таблицы итоговой сумме необработанного столбца?
Python для аналитиков — это рабочая книга по аналитике pandas: прочитайте файл, исправьте его типы, сгруппируйте его, присоединитесь к нему и проверьте ответ, прежде чем его увидит кто-либо еще.
Python для аналитиков, 19 $ →pandas.groupby это вторая половина той же идеи, сводные таблицы Excel это версия, которую большинство читателей уже знают, и программа тренировок применяет и то, и другое на практике.
Читать группу pandas →