如何根据repeats列指定次数重复Polars DataFrame的每一行?
根据Polars DataFrame中repeats列重复对应行的正确实现
原始DataFrame代码
let mut df = df! ( "start" => &[6, 3, 1], "end" => &[7, 4, 2], "repeats" => &[1, 0, 2], )?.sort(["start", "end"], false)?;
需求
根据repeats列的数值,重复对应行指定次数:
repeats=1:对应行重复1次(最终保留2行)repeats=0:对应行直接移除repeats=2:对应行重复2次(最终保留3行)
错误尝试及报错
尝试的代码:
df.with_column( all().repeat_by(col("repeats")).explode() );
报错信息:
the trait `AsRef<str>` is not implemented for `Expr`
正确实现方法
方法1:通过select生成新DataFrame
use polars::prelude::*; let df_repeated = df .select(all().repeat_by(col("repeats"))) .explode(all())?;
方法2:通过with_columns更新列后展开
use polars::prelude::*; let df_repeated = df .with_columns(all().repeat_by(col("repeats"))) .explode(all())?;
错误原因说明
- 方法调用错误:原代码使用
with_column(单数),该方法仅支持添加单个列的表达式;而all().repeat_by(...)会生成对应所有列的表达式集合,需使用with_columns(复数)方法。 - 逻辑链问题:
explode()需要作用于所有展开后的数组列,通过explode(all())可以一次性展开所有由repeat_by生成的数组列,得到每行重复指定次数的结果。
内容的提问来源于stack exchange,提问作者The Unfun Cat
相关产品推荐
相关产品推荐

