在Polars中,如何生成一个列表列,每个列表是由另一个整数类型列定义的范围?

4 投票
1 回答
43 浏览
提问于 2025-04-12 17:45

给定一个示例数据表 df

>>> df = pl.DataFrame({'l': [3,5,8]})
>>> df
shape: (3, 1)
┌─────┐
│ l   │
│ --- │
│ i64 │
╞═════╡
│ 3   │
│ 5   │
│ 8   │
└─────┘

我该如何创建一个新的列,样子像这样?

>>> df
shape: (3, 2)
┌─────┬─────────────┐
│ l   ┆ column_0    │
│ --- ┆ ---         │
│ i64 ┆ list[i64]   │
╞═════╪═════════════╡
│ 3   ┆ [0, 1, 2]   │
│ 5   ┆ [0, 1, … 4] │
│ 8   ┆ [0, 1, … 7] │
└─────┴─────────────┘

这是我认为最好的方法,但它使用了 map_rows,当数据量增大时效率不是很好

>>> temp = df.map_rows(lambda x: (list(range(x[0])),))
>>> df = df.hstack(temp)

1 个回答

3

为此,可以使用 pl.int_ranges

import polars as pl

df = pl.DataFrame({
    "length": [3,5,8]
})

df.with_columns(
    pl.int_ranges("length").alias("list")
)
shape: (3, 2)
┌────────┬─────────────┐
│ length ┆ list        │
│ ---    ┆ ---         │
│ i64    ┆ list[i64]   │
╞════════╪═════════════╡
│ 3      ┆ [0, 1, 2]   │
│ 5      ┆ [0, 1, … 4] │
│ 8      ┆ [0, 1, … 7] │
└────────┴─────────────┘

撰写回答