Anonymous
Как реализовать предыдущую функциональность «pivot()» Polars до версии 0.20.7?
Сообщение
Anonymous » 17 дек 2025, 15:27
В версии Polars 0.20.7 метод Pivot(), если для аргумента columns задано несколько значений, применял логику агрегирования к каждому столбцу в столбцах
индивидуально на основе индексного столбца, а не к коллективному набору столбцов.
До:
Код: Выделить всё
df = pl.DataFrame(
{
"foo": ["one", "one", "two", "two", "one", "two"],
"bar": ["y", "y", "y", "x", "x", "x"],
"biz": ['m', 'f', 'm', 'f', 'm', 'f'],
"baz": [1, 2, 3, 4, 5, 6],
}
)
df.pivot(index='foo', values='baz', columns=('bar', 'biz'), aggregate_function='sum')
возвращает:
Код: Выделить всё
shape: (2, 5)
┌─────┬─────┬─────┬─────┬─────┐
│ foo ┆ y ┆ x ┆ m ┆ f │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╪═════╡
│ one ┆ 3 ┆ 5 ┆ 6 ┆ 2 │
│ two ┆ 3 ┆ 10 ┆ 3 ┆ 10 │
└─────┴─────┴─────┴─────┴─────┘
После (в 0.20.7):
Код: Выделить всё
shape: (2, 5)
┌─────┬───────────┬───────────┬───────────┬───────────┐
│ foo ┆ {"y","m"} ┆ {"y","f"} ┆ {"x","f"} ┆ {"x","m"} │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═══════════╪═══════════╪═══════════╪═══════════╡
│ one ┆ 1 ┆ 2 ┆ null ┆ 5 │
│ two ┆ 3 ┆ null ┆ 10 ┆ null │
└─────┴───────────┴───────────┴───────────┴───────────┘
Предыдущий функционал мне нравится гораздо больше; очень неудобно иметь дело с новой сводной таблицей, особенно с учетом имен ее столбцов. Разработчики Polars поместили это изменение в раздел «Исправление ошибок», но оно фактически сломало мой код.
Подробнее здесь:
https://stackoverflow.com/questions/779 ... pre-0-20-7
1765974463
Anonymous
В версии Polars 0.20.7 метод Pivot(), если для аргумента columns задано несколько значений, применял логику агрегирования к каждому столбцу в столбцах [b]индивидуально[/b] на основе индексного столбца, а не к коллективному набору столбцов. До: [code]df = pl.DataFrame( { "foo": ["one", "one", "two", "two", "one", "two"], "bar": ["y", "y", "y", "x", "x", "x"], "biz": ['m', 'f', 'm', 'f', 'm', 'f'], "baz": [1, 2, 3, 4, 5, 6], } ) df.pivot(index='foo', values='baz', columns=('bar', 'biz'), aggregate_function='sum') [/code] возвращает: [code]shape: (2, 5) ┌─────┬─────┬─────┬─────┬─────┐ │ foo ┆ y ┆ x ┆ m ┆ f │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╪═════╪═════╡ │ one ┆ 3 ┆ 5 ┆ 6 ┆ 2 │ │ two ┆ 3 ┆ 10 ┆ 3 ┆ 10 │ └─────┴─────┴─────┴─────┴─────┘ [/code] После (в 0.20.7): [code]shape: (2, 5) ┌─────┬───────────┬───────────┬───────────┬───────────┐ │ foo ┆ {"y","m"} ┆ {"y","f"} ┆ {"x","f"} ┆ {"x","m"} │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 ┆ i64 ┆ i64 │ ╞═════╪═══════════╪═══════════╪═══════════╪═══════════╡ │ one ┆ 1 ┆ 2 ┆ null ┆ 5 │ │ two ┆ 3 ┆ null ┆ 10 ┆ null │ └─────┴───────────┴───────────┴───────────┴───────────┘ [/code] Предыдущий функционал мне нравится гораздо больше; очень неудобно иметь дело с новой сводной таблицей, особенно с учетом имен ее столбцов. Разработчики Polars поместили это изменение в раздел «Исправление ошибок», но оно фактически сломало мой код. Подробнее здесь: [url]https://stackoverflow.com/questions/77958666/how-to-achieve-polars-previous-pivot-functionality-pre-0-20-7[/url]