切片 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.Rows
或 df1.Columns
上使用切片语法。尽管它们在大多数情况下都表现为系列(包括您可以对它们调用 After
的事实),但当您通过切片使用它们时,它们 return 一个新的数据框。
以下应该完全满足您的需要:
let df4 = df1.Rows.[someDate..]
我能够通过两种方式对 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.Rows
或 df1.Columns
上使用切片语法。尽管它们在大多数情况下都表现为系列(包括您可以对它们调用 After
的事实),但当您通过切片使用它们时,它们 return 一个新的数据框。
以下应该完全满足您的需要:
let df4 = df1.Rows.[someDate..]