我正在rust中处理带有极性的数据。我需要过滤掉一些依赖于前一行或其他列中项目的值。我已经阅读了文档,但他们似乎使用内部方法来过滤每个单个值,如gt(),is_not_null()等。以下是我的需求:1.筛选列中的非单调递增值1.根据同一行中的其他值筛选值。1.根据当前行中一些值修改行中的一些值。我想我在过滤的时候必须使用闭包来生成一个布尔值,但是我在文档中找不到合适的函数。所以我想知道如何使用闭包来过滤?有没有其他的方法可以满足我的需要?谢谢。
gt()
is_not_null()
jv4diomz1#
我只会回答'1.',因为'2.'没有意义,'3.'是一个不相关的问题。你可以通过创建一个屏蔽序列单调过滤:
use polars::prelude::*; use polars::df; fn main() { let f = df!{ "a" => [ 1, 2, 2, 3, 4, 3], "b" => ["a", "a", "b", "a", "c", "d"], "c" => [ 5, 4, 3, 2, 1, 0], }.unwrap(); let mut previous = i32::MIN; let filter_monoton = f["a"].i32().unwrap().into_iter().map(|x| { let ret = if x.unwrap() > previous { true } else { false }; previous = x.unwrap(); ret }).collect(); let mono = f.filter(&filter_monoton).unwrap(); dbg!(&f); dbg!(&mono); }
将输出:
[src/main.rs:17] &f = shape: (6, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i32 ┆ str ┆ i32 │ ╞═════╪═════╪═════╡ │ 1 ┆ a ┆ 5 │ ├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤ │ 2 ┆ a ┆ 4 │ ├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤ │ 2 ┆ b ┆ 3 │ ├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤ │ 3 ┆ a ┆ 2 │ ├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤ │ 4 ┆ c ┆ 1 │ ├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤ │ 3 ┆ d ┆ 0 │ └─────┴─────┴─────┘ [src/main.rs:18] &mono = shape: (4, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i32 ┆ str ┆ i32 │ ╞═════╪═════╪═════╡ │ 1 ┆ a ┆ 5 │ ├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤ │ 2 ┆ a ┆ 4 │ ├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤ │ 3 ┆ a ┆ 2 │ ├╌╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌┤ │ 4 ┆ c ┆ 1 │ └─────┴─────┴─────┘
1条答案
按热度按时间jv4diomz1#
我只会回答'1.',因为'2.'没有意义,'3.'是一个不相关的问题。你可以通过创建一个屏蔽序列单调过滤:
将输出: