Rust Polars -在应用DataFrame的过滤器(对行)后选择列

wgxvkvu9  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(144)

这曾经是工作,直到升级到最新的Polars。df Dataframe有2列以上,CPCP是其中的2列。这里的目的是为大于值0的行选择列CKCP

let e11_filter = df
    .lazy()
    .filter(cols(["CK", "CP"]).gt(lit(0)))
    .collect()?;

错误如下。

Error: ComputeError(ErrString("The predicate passed to 'LazyFrame.filter' expanded to multiple expressions:

    [(col(\"CK\")) > (0)],
    [(col(\"CP\")) > (0)],
This is ambiguous. Try to combine the predicates with the 'all_exprs' or 'any_exprs' expression.

Error originated just after this operation:
DF [\"W\", \"Dataset\", \"MD\", \"CK\"]; PROJECT */8 COLUMNS; SELECTION: \"None\""))

我发现了类似的question,但它是Python版本。

4uqofj5v

4uqofj5v1#

我将通过在每一列上显式地应用“大于0”过滤器并将这些结果列过滤器与and操作组合来使调用明确:

let e11_filter = df
    .lazy()
    .filter(col("CK").gt(lit(0)).and(col("CP").gt(lit(0))))
    .collect()
    .unwrap();

Rustexplorer
更新:我得到了Dogbert建议的all_exprs版本,这更符合你链接的Python版本的答案:

let e11_filter = df
    .lazy()
    .filter(all_exprs([cols(["CK", "CP"]).gt(lit(0))]))
    .collect()
    .unwrap();

Rustexplorer

相关问题