Anonymous
Развернуть список столбцов структуры в `полярах`
Сообщение
Anonymous » 07 ноя 2024, 11:09
У меня есть 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
1730966967
Anonymous
У меня есть pl.DataFrame со столбцом, который представляет собой список записей структуры. Длина списков может отличаться: [code]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}, ], ], } ) [/code] Выглядит это так: [code]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,… │ └─────┴─────────────────────────────────┘ [/code] Я пробовал различные версии unnest и Explosion, но мне не удалось превратить это в длинный pl.DataFrame, где список преобразуется в строки, а записи структуры – в столбцы. Вот что я хочу увидеть: [code]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], } ) [/code] Это выглядит так: [code]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 │ └─────┴─────┴─────┘ [/code] Есть ли способ превратить первый pl.DataFrame во второй pl.DataFrame? Подробнее здесь: [url]https://stackoverflow.com/questions/79165506/expand-list-of-struct-column-in-polars[/url]