【问题标题】:f# deedle filter data frame based on a listf# deedle 基于列表过滤数据框
【发布时间】:2014-06-08 14:13:20
【问题描述】:

我想根据值列表过滤 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 循环。例如,在 R 中,我可以使用 %in%。

【问题讨论】:

    标签: f# deedle


    【解决方案1】:

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

    例如,假设您有recd 类型为seq&lt;float&gt;。然后你应该可以写:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-08
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 2021-02-02
      • 2014-04-12
      • 2019-08-09
      • 2019-06-29
      相关资源
      最近更新 更多