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

如何在Polars DataFrame中按含重复值的条件筛选行

在Polars DataFrame中筛选允许重复值的行(块自举场景适用)

可以实现这个需求,以下是两种高效的方法,适配你提到的块自举场景:

示例数据

先定义你给出的示例DataFrame:

import polars as pl

df = pl.DataFrame({
    'x':[0,1,2,3,4,5],
    'y':[10,11,12,13,14,15],
    'z':[0,0,1,1,2,2]
})

z_select = [0,1,1]

方法1:左连接法(简洁高效)

通过创建包含筛选条件的临时DataFrame,与原DataFrame做左连接,自动匹配并重复提取对应行:

temp_df = pl.DataFrame({"z": z_select})
result = temp_df.join(df, on="z", how="left")

print(result)

输出结果符合期望:

┌─────┬─────┬─────┐
│ z   ┆ x   ┆ y   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 0   ┆ 0   ┆ 10  │
│ 0   ┆ 1   ┆ 11  │
│ 1   ┆ 2   ┆ 12  │
│ 1   ┆ 3   ┆ 13  │
│ 1   ┆ 2   ┆ 12  │
│ 1   ┆ 3   ┆ 13  │
└─────┴─────┴─────┘

原理:临时DataFrame里的每个z值会和原DataFrame中所有匹配的行关联,当z_select里有重复值时,对应的行组会被重复提取。

方法2:分组拼接法(直观可控)

先按z分组存储,再遍历筛选条件拼接对应行组:

# 按z分组,生成z值到行组的映射
group_map = {key: group for key, group in df.group_by("z", maintain_order=True)}

# 遍历z_select,取出对应行组并拼接
result = pl.concat([group_map[z] for z in z_select])

print(result)

这种方法更直观,适合需要对每个分组做额外处理的场景,结果和方法1一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:10:25