分组后去除缺失值

Deedle missing values after grouping

我有两个框架,每个框架都包含一些 ID 和每个 ID 的零到多个度量。我想获得每个帧的每个 ID 的平均测量值,然后组合成一个更大的帧。

问题是,当 ID 没有出现在两个框架之一中时,在分组后会导致组合框架中出现缺失值。这是一个例子。通知ID"Chris"没有出现在框架A中

let aF = frame [ "AID" =?> Series.ofValues [ "Andrew"; "Andrew"; "Andrew"]; "AMES" =?> Series.ofValues [  2; 4; 3]]
let bF = frame [ "BID" =?> Series.ofValues [ "Andrew"; "Chris"; "Andrew"];  "BMES" =?> Series.ofValues [ 1; 6; 7]]
let groupF = frame [ "AG" => (aF |> Frame.groupRowsByString "AID" |> Frame.getCol "AMES") ; "BG" => (bF |> Frame.groupRowsByString "BID" |> Frame.getCol "BMES") ]
let groupFMean = groupF |> Frame.getNumericCols |> Series.mapValues (Stats.levelMean fst) |> Frame.ofColumns |> Frame.fillMissingWith 0
groupFMean.SaveCsv( "tgroupFMean.csv", includeRowKeys=true, keyNames=["Id"] )

结果 table 如下所示:

Id      AG  BG
Andrew  3   4
Chris   6

而空白单元格是“”。我尝试了 fillMissingWith 0 的变体(在系列和帧级别)但没有成功。

答案不是很明显 - 问题是 fillMissingWith 只涉及与你用来填充数据的值具有相同类型的列 - 例如,fillMissingWith "Unknown" 会仅填充字符串列中的缺失值。

在您的情况下,Frame.fillMissingWith 0 仅适用于 int 类型的列,并且没有此类列。如果您使用 Frame.fillMissingWith 0.0,一切都会按预期进行!

PS:如果您对如何做得更好有任何想法,请告诉我们。我真的不确定这里的正确行为是什么!