我想应用一个用户定义的函数,它将一些输入(对应于polars DataFrame中的一些列)应用于Rust中polars DataFrame的一些列。我使用的模式如下。我想知道这是最好的做法吗?
fn my_filter_func(col1: &Series, col2: &Series, col2: &Series) -> ReturnType {
let it = (0..n).map(|i| {
let col1 = match col.get(i) {
AnyValue::UInt64(val) => val,
_ => panic!("Wrong type of col1!"),
};
// similar for col2 and col3
// apply user-defined function to col1, col2 and col3
}
// convert it to a collection of the required type
}
3条答案
按热度按时间p8h8hvxi1#
您可以将
Series
向下转换为要迭代的正确类型,然后使用rust迭代器应用逻辑。Lazy API
您不必离开惰性API就可以访问
my_black_box_function
。我们可以收集我们想要在
Struct
数据类型中应用的列,然后在该Series
上应用闭包。rryofs0p2#
我发现对我有用的解决方案是map_multiple(我的理解-如果没有groupby/agg,就使用它)或apply_multiple(我的理解-如果你有groupby/agg)。或者,您也可以使用map_many或apply_many。见下文。
这里total_delta_sens只是一个方便的 Package 函数。你可以直接在.agg([])或.with_columns([])中使用它:
lit::<f64>(0.0).map_many(sum_fa, &[col("norm"), col("uniform")], o)
在sum_fa中,你可以像Richie已经提到的那样向下转换到ChunkedArray和.iter()甚至.par_iter(),希望这能有所帮助
0pizxfdo3#
对于Polars version =“0.30”,用途:
The Cargo.
main()函数:
输出: