pandas: группировки, соединения и упорядоченные показатели

melt, pivot_table и explode: широкий и длинный форматы

Содержание курса

Сквозной пример: melt, pivot_table и explode вместе

Три операции из этого урока решают разные задачи — важно не путать, когда какую применять:

  • melt — есть несколько столбцов с однотипными значениями (оценки по предметам, выручка по месяцам), нужно перенести их имена и значения в строки для последующей фильтрации или groupby.
  • pivot_table — есть длинная таблица с повторяющимися комбинациями ключей, нужно свернуть её в сводку с агрегацией.
  • explode — в одной ячейке хранится список, нужно разложить каждый элемент в отдельную строку.

Наиболее частая связка на практике — explodegroupby + agg: сначала вложенная структура раскрывается, потом по ней считается агрегат. Этот сценарий нельзя воспроизвести стандартными агрегациями без предварительного разворачивания.

Возьмём таблицу товаров с тегами из предыдущего раздела и подсчитаем, сколько товаров несёт каждый тег:

import pandas as pd

df_tags = pd.DataFrame({
    'product': ['Стол', 'Стул', 'Лампа'],
    'tags': [['дерево', 'мебель'], ['пластик', 'мебель'], ['свет']]
})

tag_counts = (
    df_tags
    .explode('tags')
    .reset_index(drop=True)
    .groupby('tags', as_index=False)
    .agg(product_count=('product', 'count'))
)
print(tag_counts)
      tags  product_count
0   дерево              1
1   мебель              2
2  пластик              1
3     свет              1

Тег «мебель» встречается у двух товаров — groupby это видит только потому, что explode сначала превратил каждый список в отдельные строки. Именованная агрегация product_count=('product', 'count') — тот же синтаксис agg, что вы использовали в уроке о groupby.

Резюме по выбору инструмента:

| Ситуация | Инструмент | |---|---| | Столбцы-значения → строки | pd.melt | | Строки → агрегированные столбцы | pd.pivot_table | | Список в ячейке → отдельные строки | explode |

Все три операции приводят данные к форме, удобной для следующего шага анализа: melt переносит имена value_vars и их значения в строки, pivot_table сжимает длинную таблицу в читаемую сводку с агрегацией, explode вскрывает вложенные структуры. Освоив эти преобразования, вы сможете применять к результату привычные инструменты — groupby, merge, сортировку и оконные функции, с которыми продолжим работу в следующих уроках.