分组后deedle缺少值

时间:2015-07-26 17:07:11

标签: f# deedle

我有两个框架,每个框架包含一些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"] )

结果表如下所示:

Id      AG  BG
Andrew  3   4
Chris   6

空白单元格是""。我尝试过使用fillMissingWith 0(系列和帧级别)的变体而没有成功。

1 个答案:

答案 0 :(得分:1)

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

在您的情况下,Frame.fillMissingWith 0仅适用于int类型的列,并且没有此类列。如果你使用Frame.fillMissingWith 0.0,事情会按预期工作!

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