如何使用 Deedle 从某个键及以下键获取每一行?

How can I use Deedle to get every row from some key and below?

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

受到答案的启发,我想出了以下

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

是否有内置方法可以有效地执行此操作?

如果要访问具有指定 starting/ending 键的数据框的子范围,可以使用 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 ]

要在特定日期获取数据框 starting/ending 的一部分,您可以使用:

// 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 实质上是它在幕后所做的事情 - 但您正在使用通常不需要在用户代码中使用的非常低级的操作。