【问题标题】:What is the best way to slice a sub-DataFrame of a Deedle DataFrame?对 Deedle DataFrame 的子 DataFrame 进行切片的最佳方法是什么?
【发布时间】:2017-09-28 04:02:27
【问题描述】:

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

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

b) 使用Frame.filterRows

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

通过分割数据帧的连续子集来复制/更新数据帧的最佳方法是什么?

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.

【问题讨论】:

    标签: dataframe f# slice deedle


    【解决方案1】:

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

    以下应该完全符合您的需要:

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

    【讨论】:

    • 正是我需要的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2022-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2017-05-21
    • 2020-10-06
    相关资源
    最近更新 更多