切片 Deedle DataFrame 的子 DataFrame 的最佳方法是什么?

What is the best way to slice a sub-DataFrame of a Deedle DataFrame?

我能够通过两种方式对 Deedle DataFrame 的子数据帧进行切片:

a) 使用 df.Rows.After 提取行,然后使用 Frame.ofRows

重建

b) 使用 Frame.filterRows

然而,只写 df.[someDate..] 会更整洁,但会产生错误。请看下面的代码。

通过切片其行的连续子集来 copy/update DataFrame 的最佳方法是什么?

open Deedle

let dates  = 
  [ DateTime(2013,1,1); 
    DateTime(2013,1,4); 
    DateTime(2013,1,8) ]

let values = [ 10.0; 20.0; 30.0 ]

let first = Series(dates, values)
let second = Series(dates, List.map (fun x -> x * 5.0) values) 

let df1 = Frame(["first"; "second"], [first; second])

let someDate = DateTime(2013,1,5)

let df2 = Frame.ofRows (df1.Rows.After someDate)
// Ok, a one-row DataFrame

let f firstDate (dt: DateTime) (x: ObjectSeries<string>) = (dt > firstDate)
let df3 = Frame.filterRows (f someDate) df1
// Ok, a one-row DataFrame

let df4 = df1.[someDate..]
// error FS0039: The field, constructor or member 'GetSlice' is not defined.

您可以在 df1.Rowsdf1.Columns 上使用切片语法。尽管它们在大多数情况下都表现为系列(包括您可以对它们调用 After 的事实),但当您通过切片使用它们时,它们 return 一个新的数据框。

以下应该完全满足您的需要:

let df4 = df1.Rows.[someDate..]