Развернуть список столбцов структуры в `полярах`Python

Программы на Python
Ответить
Anonymous
 Развернуть список столбцов структуры в `полярах`

Сообщение Anonymous »

У меня есть pl.DataFrame со столбцом, который представляет собой список записей структуры. Длина списков может отличаться:

Код: Выделить всё

pl.DataFrame(
{
"id": [1, 2, 3],
"s": [
[
{"a": 1, "b": 1},
{"a": 2, "b": 2},
{"a": 3, "b": 3},
],
[
{"a": 10, "b": 10},
{"a": 20, "b": 20},
{"a": 30, "b": 30},
{"a": 40, "b": 40},
],
[
{"a": 100, "b": 100},
{"a": 200, "b": 200},
{"a": 300, "b": 300},
{"a": 400, "b": 400},
{"a": 500, "b": 500},
],
],
}
)
Выглядит это так:

Код: Выделить всё

shape: (3, 2)
┌─────┬─────────────────────────────────┐
│ id  ┆ s                               │
│ --- ┆ ---                             │
│ i64 ┆ list[struct[2]]                 │
╞═════╪═════════════════════════════════╡
│ 1   ┆ [{1,1}, {2,2}, {3,3}]           │
│ 2   ┆ [{10,10}, {20,20}, … {40,40}]   │
│ 3   ┆ [{100,100}, {200,200}, … {500,… │
└─────┴─────────────────────────────────┘
Я пробовал различные версии unnest и Explosion, но мне не удалось превратить это в длинный pl.DataFrame, где список преобразуется в строки, а записи структуры – в столбцы. Вот что я хочу увидеть:

Код: Выделить всё

pl.DataFrame(
{
"id": [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3],
"a": [1, 2, 3, 10, 20, 30, 40, 100, 200, 300, 400, 500],
"b": [1, 2, 3, 10, 20, 30, 40, 100, 200, 300, 400, 500],
}
)
Это выглядит так:

Код: Выделить всё

shape: (12, 3)
┌─────┬─────┬─────┐
│ id  ┆ a   ┆ b   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1   ┆ 1   ┆ 1   │
│ 1   ┆ 2   ┆ 2   │
│ 1   ┆ 3   ┆ 3   │
│ 2   ┆ 10  ┆ 10  │
│ 2   ┆ 20  ┆ 20  │
│ …   ┆ …   ┆ …   │
│ 3   ┆ 100 ┆ 100 │
│ 3   ┆ 200 ┆ 200 │
│ 3   ┆ 300 ┆ 300 │
│ 3   ┆ 400 ┆ 400 │
│ 3   ┆ 500 ┆ 500 │
└─────┴─────┴─────┘
Есть ли способ превратить первый pl.DataFrame во второй pl.DataFrame?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-polars
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»