Принимая во внимание
Код: Выделить всё
import polars as pl
df = pl.DataFrame({
"a": [[1, 2], [3]],
"b": [
[{"id": 1, "x": 1}, {"id": 3, "x": 3}],
[{"id": 3, "x": 4}]
]
})
Код: Выделить всё
┌───────────┬─────────────────┐
│ a ┆ b │
│ --- ┆ --- │
│ list[i64] ┆ list[struct[2]] │
╞═══════════╪═════════════════╡
│ [1, 2] ┆ [{1,1}, {3,3}] │
│ [3] ┆ [{3,4}] │
└───────────┴─────────────────┘
Как
- получить одну строку для каждого выравнивающего элемента a и
- если список dict в b содержит элемент a в качестве идентификатора
- тогда иметь соответствующее значение x в столбце b
- в противном случае b должно быть null
Текущий подход
Код: Выделить всё
.explodeКод: Выделить всё
df.explode("a").explode("b").filter(
pl.col("a") == pl.col("b").struct.field("id")
).select(
pl.col("a"),
pl.col("b").struct.field("x").alias("b")
)
Код: Выделить всё
┌─────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1 ┆ 1 │
│ 3 ┆ 4 │
└─────┴─────┘
Код: Выделить всё
┌─────┬──────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪══════╡
│ 1 ┆ 1 │
│ 2 ┆ null │
│ 3 ┆ 4 │
└─────┴──────┘
Подробнее здесь: https://stackoverflow.com/questions/780 ... rs-columns
Мобильная версия