我能够以两种方式对Deedle DataFrame
的子数据帧进行切片:
a)使用df.Rows.After
提取行,然后使用Frame.ofRows
b)使用Frame.filterRows
然而,仅仅编写df.[someDate..]
会更加简洁,但会产生错误。请参阅下面的代码。
通过切片连续的行子集来复制/更新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.
答案 0 :(得分:4)
您可以在df1.Rows
或df1.Columns
上使用切片语法。即使这些事情对大多数事情都是一系列的(包括你可以在它们上面调用After
这一事实),当你通过切片使用它们时它们会返回一个新的数据框。
以下内容应该完全满足您的需求:
let df4 = df1.Rows.[someDate..]