在两个数据帧的外连接之后,我得到的结果数据帧f
现在包含列A,B,C和D,它们都有缺失值。我想使用fillMissing
填写缺失的值,但仅限于C和D列。
答案 0 :(得分:2)
我已经找到了两种方法来实现这一点,但两者都不是特别漂亮。我想知道是否有更好的功能方法来做到这一点。
fr
|> fun f ->
f?C <- f?C |> Series.fillMissing Direction.Forward
f?D <- f?D |> Series.fillMissing Direction.Forward
f
|> ...further processing...`
fr
|> Frame.mapCols
(fun k v -> match k with
| "C" | "D" -> v |> Series.fillMissing Direction.Forward
| _ -> v.As<obj>() )
|> ...further processing...
我希望得到一些关于是否有更好方法的意见。
编辑:我刚刚在我正在使用的实际数据框架(~70K行)上运行了三种方法(方法3是Foggy Finder的基于合并的方法),并得到以下结果:Method 1: Real: 00:00:00.003, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0
Method 2: Real: 00:00:00.236, CPU: 00:00:00.234, GC gen0: 9, gen1: 3, gen2: 1
Method 3: Real: 00:00:00.151, CPU: 00:00:00.156, GC gen0: 20, gen1: 1, gen2: 0
答案 1 :(得分:1)
我不认为这个选项更好,但仍有可能:
f
|> Frame.expandCols [| "A"; "B" |]
|> Frame.fillMissing Direction.Forward
|> Frame.merge (Frame.expandCols [| "C"; "D" |] f)
|> ...further processing...
答案 2 :(得分:1)
这就是我在处理类似情况的一个函数中的做法。您可以在此之后根据需要对列进行排序。
let frame1 =
rawFrame
|> Frame.sliceCols ["C";"D"]
|> Frame.fillMissing Direction.Forward
|> Frame.dropSparseRows
// Left join with the other two columns
let frame2 = rawFrame |> Frame.sliceCols ["A";"B"]
frame1.Join(frame2, kind = JoinKind.Left)