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

时间:2017-04-30 14:00:20

标签: dataframe f# slice deedle

我能够以两种方式对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.

1 个答案:

答案 0 :(得分:4)

您可以在df1.Rowsdf1.Columns上使用切片语法。即使这些事情对大多数事情都是一系列的(包括你可以在它们上面调用After这一事实),当你通过切片使用它们时它们会返回一个新的数据框。

以下内容应该完全满足您的需求:

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