在 F# 中过滤行

Filtering Rows in F#

我有一个代码,其中有以下框架和过滤器行,如下所示:

let dfff= 
[ "year" => series [ 1 => 1990.0; 2 => 1991.00; 3 => 1992.0;  4 => 1993.0]
  "gold"  => series [ 1 => 10.0; 2 => 10.00; 3 => 15.0; 4 => 20.0] 
  "silver"  => series [ 1 => 20.0; 2 => 30.00; 3 => 45.0; 4 => 55.0] ] 
|> frame

let dfff2 = dfff |> Frame.filterRows (fun key row  -> row?year <= 1992.0 )

为什么我要写key

Frame.filterRows (fun key row  -> row?year <= 1992.0)

如果我的函数只依赖于行? key在这里扮演什么角色?如果有人能向我解释逻辑,我将不胜感激。谢谢!

在 Deedle 中,帧有行键和列键。在你的例子中,你有 Frame<int, string> 意味着行键是整数(只是数字)而列键是字符串(列名) - 但你可能还有日期或其他更有趣的东西作为行键。

filterRows 函数为您提供行键和行数据。 key 参数只是行键 - 在您的情况下,这是(无趣的)int 索引,但它可能是例如在其他情况下有用的日期。

F# 允许您编写 _ 以显式忽略值:

let dfff2 = dfff |> Frame.filterRows (fun _ row  -> row?year <= 1992.0 )

Series 模块中,我们有 Series.filterSeries.filterValues,其中第一个为您提供键和值,第二个为您提供值。因此,我们可以遵循相同的模式并添加 Frame.filterRowValues.

这实际上很容易,所以如果您想做出贡献,请发送一个拉取请求并在某处进行更改 around here :-)。