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

如何在Polars中过滤后按自定义索引选行(类似Pandas的.loc)

在Polars中实现类似Pandas .loc按原索引检索行的功能

Polars没有Pandas那样内置的持久化行索引,但通过提前将初始行号存储为一列,就能轻松复刻.loc按原索引选行的功能,具体步骤如下:

1. 保留原行索引作为列

用.with_row_index()方法为DataFrame添加一列(比如命名为original_idx),用来存储初始的行序号:

import polars as pl

# 创建带原索引列的DataFrame
df = pl.DataFrame({"A": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}).with_row_index("original_idx")

2. 执行过滤/排序操作

后续的过滤、排序等操作都会保留original_idx列,比如模拟你示例中的过滤逻辑:

# 过滤出原索引为0、10、4的行,得到和Pandas中filtered_df等效的结果
filtered_df = df.filter(pl.col("original_idx").is_in([0, 10, 4]))

3. 按原索引检索行

通过.filter()结合列匹配,就能像Pandas的.loc一样按原索引选行:

  • 检索单行(原索引为4):
print(filtered_df.filter(pl.col("original_idx") == 4))

输出:

shape: (1, 2)
┌─────────────┬─────┐
│ original_idx ┆ A   │
│ ---         ┆ --- │
│ u32         ┆ i64 │
├─────────────┼─────┤
│ 4           ┆ 4   │
└─────────────┴─────┘
  • 检索多行(原索引为0和10):
print(filtered_df.filter(pl.col("original_idx").is_in([0, 10])))

输出:

shape: (2, 2)
┌─────────────┬─────┐
│ original_idx ┆ A   │
│ ---         ┆ --- │
│ u32         ┆ i64 │
├─────────────┼─────┤
│ 0           ┆ 0   │
│ 10          ┆ 10  │
└─────────────┴─────┘

效率说明

这种方案完全基于Polars的向量化操作实现,性能高效,即使处理百万级以上的大型数据集也不会有明显性能损耗。

内容的提问来源于stack exchange,提问作者Míriam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:52:37