有两种方法可以做到这一点.
struct /取消嵌套
最简单的是先到.list.to_struct
,然后是unnest
from string import ascii_lowercase
(
df
.with_columns(
pl.col('numbers').list.to_struct(
fields=lambda idx: f"numbers_{ascii_lowercase[idx]}",
n_field_strategy='max_width'
)
)
.unnest('numbers')
)
到达
from string import ascii_lowercase
max_width=df['numbers'].list.len().max()
(
df
.select(
pl.exclude('numbers'),
*[pl.col('numbers').list.到达(x).alias(f"numbers_{ascii_lowercase[x]}")
for x in range(max_width)]
)
)
无论是哪种情况,您都会得到:
shape: (4, 3)
┌─────────┬───────────┬───────────┐
│ letters ┆ numbers_a ┆ numbers_b │
│ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 │
╞═════════╪═══════════╪═══════════╡
│ a ┆ 1 ┆ 1 │
│ a ┆ 2 ┆ 3 │
│ b ┆ 4 ┆ 5 │
│ c ┆ 6 ┆ 7 │
└─────────┴───────────┴───────────┘
在前一种情况下,您可以更容易地链接方法,但第二种情况依赖于首先确定max_width
,这不太灵活.第二种方法might性能更好,但我不是很确定,所以值得一试.