我有两个时间序列,它们的采样率相同。我想执行一个外连接,然后填写任何缺失的数据(后外连接,可能有一个时间点数据存在于一个系列但不是另一个,即使它们是相同的采样率)与最近的前一个值。
如何使用Deedle执行此操作?
编辑:
基于this,我想您可以在加入之前重新采样,如下所示:
// Get the most recent value, sampled at 2 hour intervals
someSeries|> Series.sampleTimeInto
(TimeSpan(2, 0, 0)) Direction.Backward Series.lastValue
完成此操作后,您可以安全地加入。也许还有另一种方式?
答案 0 :(得分:2)
您应该能够在原始系列上执行外连接(最好将它们转换为框架,因为这样您将获得漂亮的多列框架),然后填充缺失的值{{1} }。
Frame.fillMissing
最终结果和缺少值的中间框架如下所示:
// Note that s1[2] is undefined and s2[3] is undefined
let s1 = series [ 1=>1.0; 3=>3.0; 5=>5.0 ]
let s2 = series [ 1=>1.1; 2=>2.2; 5=>5.5 ]
// Build frames to make joining easier
let f1, f2 = frame [ "S1" => s1 ], frame [ "S2" => s2 ]
// Perform outer join and then fill the missing data
let f = f1.Join(f2, JoinKind.Outer)
let res = f |> Frame.fillMissing Direction.Forward
请注意,结果仍然可能包含缺失值 - 如果缺少第一个值,则val it : Frame<int,string> =
S1 S2
1 -> 1 1.1
2 -> <missing> 2.2
3 -> 3 <missing>
5 -> 5 5.5
>
val it : Frame<int,string> =
S1 S2
1 -> 1 1.1
2 -> 1 2.2
3 -> 3 2.2
5 -> 5 5.5
函数没有先前传播的值,因此系列可能会以某些缺失值开头。