我有以下变量:
data:seq<(DateTime*float)>
我想做以下F#代码但使用Deedle:
data
|> Seq.groupBy (fun (k,v) -> k.Year)
|> Seq.map (fun (k,v) ->
let vals = v |> Seq.pairwise
let first = seq { yield v |> Seq.head }
let diffs = vals |> Seq.map (fun ((t0,v0),(t1,v1)) -> (t1, v1 - v0))
(k, diffs |> Seq.append first))
|> Seq.collect snd
使用F#序列可以正常工作,但我想使用Deedle系列。我知道我可以这样做:
(data:Series<DateTime*float>) |> Series.groupBy (fun k v -> k.Year)...
但是接下来我需要取组内年份差异,除了头值,它应该只是值本身,然后将结果展平为系列......我对deedle语法有点困惑
谢谢!
答案 0 :(得分:1)
我认为以下可能正在做你需要的事情:
ts
|> Series.groupInto
(fun k _ -> k.Month)
(fun m s ->
let first = series [ fst s.KeyRange => s.[fst s.KeyRange]]
Series.merge first (Series.diff 1 s))
|> Series.values
|> Series.mergeAll
groupInto
函数允许您指定应在每个组上调用的函数Series.diff
创建包含差异的系列,并使用Series.merge
在开头添加第一个值的系列。Series.mergeAll
展平它们。