考虑以下数据框:
df = pl.DataFrame(data={"col1": range(10)})
┌──────┐
│ col1 │
│ --- │
│ i64 │
╞══════╡
│ 0 │
│ 1 │
│ 2 │
│ 3 │
│ 4 │
│ 5 │
│ 6 │
│ 7 │
│ 8 │
│ 9 │
└──────┘
假设我有一个元组列表,其中第一个值表示起始索引,第二个值表示长度值(如
pl.DataFrame.slice
中所使用)。这可能看起来像这样:
slices = [(1,2), (5,3)]
现在,从
df
中切片/提取两个块的好方法是什么,其中第一个切片从第 1 行开始,长度为 2,而第二个块从第 5 行开始,长度为 3。
这就是我正在寻找的:
┌──────┐
│ col1 │
│ --- │
│ i64 │
╞══════╡
│ 1 │
│ 2 │
│ 5 │
│ 6 │
│ 7 │
└──────┘
pl.DataFrame.slice
分别获取每个切片,然后使用 pl.concat
连接所有切片。
pl.concat(df.slice(*slice) for slice in slices)
shape: (5, 1)
┌──────┐
│ col1 │
│ --- │
│ i64 │
╞══════╡
│ 1 │
│ 2 │
│ 5 │
│ 6 │
│ 7 │
└──────┘
一般来说,你可以这样做
pl.concat(
df.filter(pl.col.col1 >= s[0]).head(s[1]) for s in slices
)
┌──────┐
│ col1 │
│ --- │
│ i64 │
╞══════╡
│ 1 │
│ 2 │
│ 5 │
│ 6 │
│ 7 │
└──────┘