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

Polars如何实现类似Pandas的按列表筛选列名功能?

Polars中筛选符合QC标准的样本列的正确实现

你需要先从df_meta中筛选出QC状态为"pass"的样本名,再和df的列名取交集,同时保留ID列(标识列),避免包含df中不存在的列(比如Sample4)。以下是两种可行方案:

方案1:分步处理(直观易读)

import polars as pl

# 1. 从df_meta中提取QC合格的样本名,转为Python列表
pass_samples = (
    df_meta
    .filter(pl.col("qc") == "pass")
    .select("sample")
    .collect()  # LazyFrame转为DataFrame
    .to_series()
    .to_list()
)

# 2. 筛选出df中存在的合格样本列,同时保留ID列
selected_cols = ["ID"] + [col for col in pass_samples if col in df.columns]

# 3. 选择目标列
result = df.select(selected_cols).collect()
print(result)

输出结果:

shape: (3, 3)
┌─────┬─────────┬─────────┐
│ ID  ┆ Sample1 ┆ Sample2 │
│ --- ┆ ---     ┆ ---     │
│ str ┆ i64     ┆ i64     │
╞═════╪═════════╪═════════╡
│ CX1 ┆ 1       ┆ 2       │
│ CX2 ┆ 1       ┆ 2       │
│ CX3 ┆ 1       ┆ 2       │
└─────┴─────────┴─────────┘

方案2:链式操作(更简洁)

# 直接获取df中存在的合格样本列
valid_samples = (
    df_meta
    .filter(pl.col("qc") == "pass")
    .select("sample")
    .collect()
    .to_series()
    .filter(pl.col("sample").is_in(df.columns))
)

# 选择ID列和合格样本列
result = df.select(["ID", *valid_samples.to_list()]).collect()

你之前的错误原因

  • 第一种方法:pl.all().is_in("meta_ids")是检查列的数值是否在meta_ids中,而非检查列名,逻辑方向错误。
  • 第二种方法:直接使用所有QC合格的样本名(包括df中不存在的Sample4),导致ColumnNotFoundError,缺少列名存在性的校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:40:09