Spec-Zone.ru › Nushell

polars pivot для dataframe

Преобразовать DataFrame из длинного формата в широкий.

Сигнатура

> polars pivot {flags}

Флаги

  • --on, -o {any}: имена столбцов для сводной таблицы.
  • --on-cols, -c {any}: имена столбцов, используемых в качестве столбцов значений
  • --index, -i {any}: селектор или имена столбцов для индексов.
  • --values {any}: селектор или имена столбцов, используемых в качестве столбцов значений.
  • --aggregate, -a {any}: агрегатная функция, применяемая при создании сводной таблицы. Поддерживаются: first, sum, min, max, mean, median, count, last или пользовательское выражение.
  • --separator, -p {string}: разделитель в сгенерированных именах столбцов при наличии нескольких столбцов values (по умолчанию '_').
  • --maintain-order: сохранять порядок.
  • --streamable, -t: использовать ли потоковый движок polars. Допустимо только для ленивых фреймов данных
  • --stable: выполнить стабильное преобразование в сводную таблицу.

Типы входных и выходных данных:

вход выход
polars_dataframe polars_dataframe
polars_lazyframe polars_lazyframe

Примеры

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

> {
        "name": ["Cady", "Cady", "Karen", "Karen"],
        "subject": ["maths", "physics", "maths", "physics"],
        "test_1": [98, 99, 61, 58],
        "test_2": [100, 100, 60, 60],
    } |
    polars into-df --as-columns |
    polars pivot --on subject --on-cols [maths physics] --index name --values test_1 |
    polars sort-by name maths physics |
    polars collect
╭───┬───────┬───────┬─────────╮
│ # │ name  │ maths │ physics │
├───┼───────┼───────┼─────────┤
│ 0 │ Cady  │    98 │      99 │
│ 1 │ Karen │    61 │      58 │
╰───┴───────┴───────┴─────────╯

Имея набор результатов тестов, изменим его форму так, чтобы каждой строке соответствовал один студент, предметы были представлены отдельными столбцами, а значения содержали результаты test_1, не указывая --on-cols

> {
        "name": ["Cady", "Cady", "Karen", "Karen"],
        "subject": ["maths", "physics", "maths", "physics"],
        "test_1": [98, 99, 61, 58],
        "test_2": [100, 100, 60, 60],
    } |
    polars into-df --as-columns |
    polars pivot --on subject --index name --values test_1 |
    polars sort-by name maths physics |
    polars collect
╭───┬───────┬───────┬─────────╮
│ # │ name  │ maths │ physics │
├───┼───────┼───────┼─────────┤
│ 0 │ Cady  │    98 │      99 │
│ 1 │ Karen │    61 │      58 │
╰───┴───────┴───────┴─────────╯

Имея набор результатов тестов, изменим его форму так, чтобы каждой строке соответствовал один студент, и используем селектор значений, включающий все результаты тестов

> {
        "name": ["Cady", "Cady", "Karen", "Karen"],
        "subject": ["maths", "physics", "maths", "physics"],
        "test_1": [98, 99, 61, 58],
        "test_2": [100, 100, 60, 60],
    } |
    polars into-df --as-columns |
    polars pivot --on subject --on-cols [maths physics] --index name --values (polars selector starts-with test) |
    polars sort-by name test_1_maths test_1_physics test_2_maths test_2_physics |
    polars collect
╭───┬───────┬──────────────┬────────────────┬──────────────┬────────────────╮
│ # │ name  │ test_1_maths │ test_1_physics │ test_2_maths │ test_2_physics │
├───┼───────┼──────────────┼────────────────┼──────────────┼────────────────┤
│ 0 │ Cady  │           98 │             99 │          100 │            100 │
│ 1 │ Karen │           61 │             58 │           60 │             60 │
╰───┴───────┴──────────────┴────────────────┴──────────────┴────────────────╯

Если DataFrame содержит повторяющиеся записи для столбцов сводной таблицы, используйте флаг aggregate, чтобы указать, как агрегировать значения этих записей. В этом примере мы суммируем значения foo и bar для строк с одинаковыми значениями ix и col.

> {
        "ix": [1, 1, 2, 2, 1, 2],
        "col": ["a", "a", "a", "a", "b", "b"],
        "foo": [0, 1, 2, 2, 7, 1],
        "bar": [0, 2, 0, 0, 9, 4],
    } |
    polars into-df --as-columns |
    polars pivot --on col --on-cols [a b] --index ix --aggregate sum |
    polars sort-by ix foo_a foo_b bar_a bar_b |
    polars collect
╭───┬────┬───────┬───────┬───────┬───────╮
│ # │ ix │ foo_a │ foo_b │ bar_a │ bar_b │
├───┼────┼───────┼───────┼───────┼───────┤
│ 0 │  1 │     1 │     7 │     2 │     9 │
│ 1 │  2 │     4 │     1 │     0 │     4 │
╰───┴────┴───────┴───────┴───────┴───────╯

Copyright © 2019–2026 The Nushell Project DevelopersLicensed under the MIT License.
https://www.nushell.sh/commands/docs/polars_pivot.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API