在Polars中,如何生成一个列表列,每个列表是由另一个整数类型列定义的范围?
给定一个示例数据表 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] │
└────────┴─────────────┘