/ / Jaki jest najlepszy sposób na cięcie pod-DataFrame z Deedle DataFrame? - ramka danych, f #, plasterek, deedle

Jaki jest najlepszy sposób na cięcie pod-DataFrame z Deedle DataFrame? - ramka danych, f #, plasterek, deedle

Byłem w stanie wyciąć pod-DataFrame z a Deedle DataFrame na dwa sposoby:

a) Wyodrębnij wiersze za pomocą df.Rows.After a następnie zrekonstruuj używając Frame.ofRows

b) Użyj Frame.filterRows

Jednak byłoby o wiele lepiej po prostu napisać df.[someDate..] ale to generuje błąd. Zobacz poniższy kod.

Jaki jest najlepszy sposób na kopiowanie / aktualizowanie DataFrame przez wycinanie ciągłego podzbioru jego wierszy?

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.

Odpowiedzi:

4 dla odpowiedzi № 1

Możesz użyć składni podziału na df1.Rows lub df1.Columns. Nawet jeśli zachowują się jak seria dla większości rzeczy (w tym fakt, że możesz zadzwonić After na nich), zwracają nową ramkę danych, gdy używa się ich poprzez cięcie.

Następujące powinny zrobić dokładnie to, czego potrzebujesz:

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