在外部联接后填充缺少的数据

时间:2014-04-15 14:32:17

标签: f# deedle

我有两个时间序列,它们的采样率相同。我想执行一个外连接,然后填写任何缺失的数据(后外连接,可能有一个时间点数据存在于一个系列但不是另一个,即使它们是相同的采样率)与最近的前一个值。

如何使用Deedle执行此操作?

编辑:

基于this,我想您可以在加入之前重新采样,如下所示:

// Get the most recent value, sampled at 2 hour intervals
someSeries|> Series.sampleTimeInto
  (TimeSpan(2, 0, 0)) Direction.Backward Series.lastValue

完成此操作后,您可以安全地加入。也许还有另一种方式?

1 个答案:

答案 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 函数没有先前传播的值,因此系列可能会以某些缺失值开头。