我有两个框架,每个框架包含一些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(系列和帧级别)的变体而没有成功。
答案 0 :(得分:1)
答案不是很明显 - 问题是fillMissingWith
只触及与用于填充数据的值具有相同类型的列 - 例如,fillMissingWith "Unknown"
只会填充在字符串列中缺少值。
在您的情况下,Frame.fillMissingWith 0
仅适用于int
类型的列,并且没有此类列。如果你使用Frame.fillMissingWith 0.0
,事情会按预期工作!
PS:如果您对如何做得更好有任何想法,请告诉我们。我真的不确定这里的行为是什么!