Dataframe Deedle F#-查找索引组中的最大行数

Dataframe Deedle F#-查找索引组中的最大行数,dataframe,f#,deedle,Dataframe,F#,Deedle,我试图得到deedle数据框中组内第一个值和最后一个值之间的差异。我一直在尝试获取每个点的最大值和最小值。我有一个按“TimeStamp”排序的数据帧,按“Test”分组,并有一个名为float类型的“Value”列。例如,使用以下数据: Test1,2018/01/01 => 3 Test1,2018/01/02 => 5 Test1,2018/01/03 => 15 Test1,2018/01/04 => 25 Test1,2018/01/05 => 35 Te

我试图得到deedle数据框中组内第一个值和最后一个值之间的差异。我一直在尝试获取每个点的最大值和最小值。我有一个按“TimeStamp”排序的数据帧,按“Test”分组,并有一个名为float类型的“Value”列。例如,使用以下数据:

Test1,2018/01/01 => 3
Test1,2018/01/02 => 5
Test1,2018/01/03 => 15
Test1,2018/01/04 => 25
Test1,2018/01/05 => 35
Test2,2018/01/01 => 5
Test2,2018/01/02 => 15
Test2,2018/01/03 => 15
Test2,2018/01/04 => 25
Test2,2018/01/05 => 30
我期待一个结果

Test1 => 32    (35-3)
Test2 => 25    (30-5)
我想我可以用

input |> applyLevel fst Stats.maxBy |> Frame.ofRows
input |> applyLevel fst Stats.minBy |> Frame.ofRows
但我似乎无法让它工作,无论组合


提前感谢您

为了测试这一点,我以以下格式将您的示例数据保存在CSV文件中:

Category, Timestamp, Value
Test1, 2018/01/01, 3
Test1, 2018/01/02, 5
Test1, 2018/01/03, 15
Test1, 2018/01/04, 25
Test1, 2018/01/05, 35
Test2, 2018/01/01, 5
Test2, 2018/01/02, 15
Test2, 2018/01/03, 15
Test2, 2018/01/04, 25
Test2, 2018/01/05, 30
现在,我认为使用
Stats.max
Stats.min
的问题在于,当序列为空时,它们返回的选项是
None
,这使得无法将它们直接传递给
applyLevel
(我承认这是一个有点不方便的设计)

但是,您可以将自定义函数传递给
applyLevel
,这也允许您同时执行
min
max

Frame.ReadCsv("sample.csv")
|> Frame.groupRowsByString "Category"
|> Frame.applyLevel fst (fun s -> 
    match Stats.min s, Stats.max s with
    | Some lo, Some hi -> hi - lo
    | _ -> nan)

这将读取CSV文件(它将引入一个新的顺序键),然后按类别对数据进行分组(这将获得一个具有行键
string*int
)的数据帧),然后我们使用
applyLevel fst
聚合具有相同
字符串
键的所有行。自定义函数获取值序列的最小值和最大值并将其减去(只有在
s
中缺少一些值时才会出现
nan
的情况)

谢谢,这很有帮助。这帮我解决了我的问题。