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

如何在Polars中高效生成重复行?解决Pandas迁移适配问题

Polars实现行重复(对应Pandas explode逻辑)

错误原因分析

  1. 第一个错误:with_columns中直接调用explode会导致列长度与原DataFrame行数不匹配。with_columns要求新增列的行数必须和原DataFrame一致,而explode会把列表列展开,行数变为原来的2倍(从3行变6行),因此触发ShapeError。
  2. 第二个错误:cast(pl.List(float))无法将单个数值转为单元素列表,且直接用*2会触发广播不匹配的错误,因为Polars无法将标量2与列表列直接做算术运算。

正确解决方案

Polars提供了内置的repeat方法,可以高效实现将每个元素重复指定次数生成列表,再通过explode展开为多行,完全匹配Pandas的逻辑。

方法1:使用repeat(推荐,向量化操作更高效)

import polars as pl

df = pl.DataFrame({ "key": [1, 2, 3], "value": [4, 5, 6] })

# 先将key列每个元素重复2次生成列表列,再展开
df = df.with_columns(pl.col("key").repeat(n=2)).explode("key")
print(df)

输出结果:

shape: (6, 2)
┌─────┬───────┐
│ key ┆ value │
│ --- ┆ ---   │
│ i64 ┆ i64   │
╞═════╪═══════╡
│ 1   ┆ 4     │
│ 1   ┆ 4     │
│ 2   ┆ 5     │
│ 2   ┆ 5     │
│ 3   ┆ 6     │
│ 3   ┆ 6     │
└─────┴───────┘

方法2:使用map_elements(不推荐,逐元素处理性能较低)

如果一定要用自定义逻辑生成重复列表,可以先添加列表列,再对整个DataFrame执行explode:

import polars as pl

df = pl.DataFrame({ "key": [1, 2, 3], "value": [4, 5, 6] })

df = df.with_columns(pl.col("key").map_elements(lambda x: [x]*2)).explode("key")

补充说明

  • repeat(n=2):将列中每个元素重复n次,生成包含n个元素的列表,是Polars内置的向量化操作,性能远高于map_elements。
  • explode("key"):对指定的列表列进行展开,将每个列表元素转为单独一行,其他列的值自动重复对应次数,与Pandas的explode行为完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:16:21