Из длинного формата в широкий — Pivot

Преобразование pivot напрямую переводит данные из длинного формата в широкий без предварительной обработки. Подробнее см. «Длинный и широкий форматы». Оно полезно для создания матриц и перекрёстных таблиц и действует как обратное преобразованию fold.

Вот пример с данными об олимпийских медалях:

import altair as alt
import pandas as pd

df = pd.DataFrame.from_records([
    {"country": "Norway", "type": "gold", "count": 14},
    {"country": "Norway", "type": "silver", "count": 14},
    {"country": "Norway", "type": "bronze", "count": 11},
    {"country": "Germany", "type": "gold", "count": 14},
    {"country": "Germany", "type": "silver", "count": 10},
    {"country": "Germany", "type": "bronze", "count": 7},
    {"country": "Canada", "type": "gold", "count": 11},
    {"country": "Canada", "type": "silver", "count": 8},
    {"country": "Canada", "type": "bronze", "count": 10}
])

alt.Chart(df).transform_pivot(
    'type',
    groupby=['country'],
    value='count'
).mark_bar().encode(
    x='gold:Q',
    y='country:N',
)

В сочетании с другими элементами грамматики Altair pivot позволяет создавать интересные типы диаграмм. Например, здесь оно используется для общей подсказки со значениями нескольких линий:

import altair as alt
from altair.datasets import data

source = data.stocks()
base = alt.Chart(source).encode(x='date:T')
columns = sorted(source.symbol.unique())
selection = alt.selection_point(
    fields=['date'], nearest=True, on='pointerover', empty=False, clear='pointerout'
)

lines = base.mark_line().encode(y='price:Q', color='symbol:N')
points = lines.mark_point().transform_filter(selection)

rule = base.transform_pivot(
    'symbol', value='price', groupby=['date']
).mark_rule().encode(
    opacity=alt.when(selection).then(alt.value(0.3)).otherwise(alt.value(0)),
    tooltip=[alt.Tooltip(c, type='quantitative') for c in columns]
).add_params(selection)

lines + points + rule

Параметры преобразования

Метод Chart.transform_pivot основан на классе PivotTransform, который поддерживает следующие параметры:

Нажмите, чтобы показать таблицу
СвойствоТипОписание
groupbyarray(FieldName)

Необязательные поля для группировки. Если не заданы, используется одна группа, содержащая все объекты данных.

limitnumber

Необязательный параметр максимального числа создаваемых полей. Значение по умолчанию 0 означает отсутствие ограничения. Перед применением ограничения имена pivot сортируются по возрастанию. По умолчанию: 0.

opAggregateOp

Операция агрегирования, применяемая к сгруппированным значениям поля value. По умолчанию: sum.

pivotFieldName

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

valueFieldName

Поле данных для заполнения новых столбцов. Его агрегированные значения становятся значениями новых полей.