f# - 如何使用 Deedle 获取某个键及以下键的每一行?

标签 f# deedle

我想返回直到并包括某个键的每个值。 虽然我可以生成每个这样的 key 并将它们全部放入 Get 中,但我怀疑这会低效地搜索每个 key 的值。

this 答案的启发,我提出了以下内容

let getAllUpTo key (frame:Frame<'key,'col>) : Frame<'key, 'col> =
    let endRng = frame.RowIndex.Locate key
    let startRng = frame.RowIndex.KeyRange |> fst |> frame.RowIndex.Locate
    let fixedRange = RangeRestriction.Fixed (startRng, endRng)
    frame.GetAddressRange fixedRange

是否有内置方法可以有效地完成此操作?

最佳答案

如果要访问具有指定开始/结束键的数据帧的子范围,可以使用df.Rows.[ ... ] 索引器来执行此操作。假设我们有一些按(排序)日期索引的数据:

let s1 = series [
  let rnd = Random()
  for d in 0 .. 365 ->
    DateTime(2020, 1, 1).AddDays(float d) => rnd.Next() ]

let df = frame [ "S1" => s1 ]

要获取在特定日期开始/结束的数据帧的一部分,您可以使用:

// Get all rows from 1 June (inclusive)  
df.Rows.[DateTime(2020, 6, 1) ..]

// Get all rows until 1 June (inclusive)  
df.Rows.[.. DateTime(2020, 6, 1)]

您使用的 API 本质上就是它的幕后功能 - 但您使用的是非常低级的操作,通常不需要在用户代码中使用。

关于f# - 如何使用 Deedle 获取某个键及以下键的每一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64849252/

相关文章:

function - F# 函数不允许我改变可变值

F# deedle cast 列数据类型

f# - 在 Deedle 中查找每个分层索引的 Stats.max

f# - 与列表相比,Deedle/Series 慢是正确的吗?

visual-studio-2015 - 如何在 F# 中优雅地操作这个 Deedle.Frame

f# - map 中的一组键

f# - 是否可以在 F# 中定义通用扩展方法?

f# - 在F#中匹配数组

events - 在多线程代码中使用 F# 事件和异步事件