You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中通过单步操作按任意步长将行转列?

单链表达式实现Polars按步长分组转列

你可以通过添加索引、计算分组与列标识、透视转置的单链操作实现需求,无需拆分多个DataFrame再合并。完整代码如下:

import polars as pl

text = "a brown fox jumps over a lazy dog's head"
step = 3

dff = (
    pl.DataFrame({"a": text.split(" ")})
    .with_row_index("idx")
    .with_columns(
        group=pl.col("idx") // step,
        col_label=pl.col("idx") % step
    )
    .pivot(
        index="group",
        columns="col_label",
        values="a"
    )
    .rename({0: "first", 1: "second", 2: "third"})
    .drop("group")
)

print(dff)

输出结果和你原来的一致:

shape: (3, 3)
┌───────┬────────┬───────┐
│ first ┆ second ┆ third │
│ ---   ┆ ---    ┆ ---   │
│ str   ┆ str    ┆ str   │
╞═══════╪════════╪═══════╡
│ a     ┆ brown  ┆ fox   │
│ jumps ┆ over   ┆ a     │
│ lazy  ┆ dog's  ┆ head  │
└───────┴────────┴───────┘

步骤说明:

  • with_row_index("idx"):添加行索引列,用于后续计算分组和列位置
  • with_columns:
    • group=pl.col("idx") // step:计算每个元素所属的目标行分组(每step个元素为一组)
    • col_label=pl.col("idx") % step:计算每个元素在目标行中的列位置(0对应first,1对应second,2对应third)
  • pivot:以group为行索引,col_label为列名,a为值进行透视转置,自动对齐同组元素
  • rename:把默认的数字列名改为你需要的first/second/third
  • drop("group"):移除临时分组列,得到最终结果

这种方式全程单链操作,避免了多个中间DataFrame的创建,更符合Polars的链式API风格,代码也更简洁易维护。

内容的提问来源于stack exchange,提问作者pedrosaurio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:45:51