1

我想根据值列表过滤 Deedle 数据框,我将如何执行此操作?

我有一个想法使用下面的代码:

  let d= df1|>filterRowValues(fun row -> row.GetAs<float>("ts") = timex)

然而,这个问题是它只基于一个变量,然后我想到将它与一个 for 循环和一个 append 函数结合起来:

for i in 0.. recd.length -1 do 
  df2.Append(df1|>filterRowValues(fun row -> row.GetAs<float>("ts") = recd.[i]))

但是,这也不起作用,必须有更好的方法在不使用 for 循环的情况下执行此操作。例如,在 RI 中可以使用 %in%。

4

1 回答 1

4

您可以使用 F# 集类型来创建一组您感兴趣的值。在过滤中,您可以检查该集合是否包含该行的实际值。

例如,假设您recd的类型为seq<float>。然后你应该可以写:

let recdSet = set recd
let d = df1 |> Frame.filterRowValues (fun row -> 
  recdSet.Contains(row.GetAs<float>("ts"))

其他一些可能有用的东西:

  • 您可以替换row.GetAs<float>("ts")为 just row?ts(它始终返回float并仅在您具有固定名称时才有效,例如“ts”,但它使代码更好)

  • 比较float值可能不是最好的做法(由于浮点不精确,这可能并不总是按预期工作)。

于 2014-06-08T15:05:16.170 回答