如何在Deedle中对任意类型数据行列重排并保留缺失值
在Deedle中对任意类型数据透视并保留缺失值
你的场景中每个Key和Attribute的组合仅对应一个值(或缺失),不需要用Sum()这类数值聚合方法,直接提取分组内的唯一值即可保留原数据(包括缺失值)。
修改后的代码如下:
open Deedle let str = "Key;Attribute;Value\nK1;A;01.01.2000\nK1;B;\nK2;A;02.02.2020\nK2;B;03.03.2030" let bytes = System.Text.Encoding.UTF8.GetBytes str let stream = new MemoryStream(bytes) let df = Frame.ReadCsv( stream = stream, separators = ";", hasHeaders = true ) // 透视处理,替换聚合逻辑 let df1 = df |> Frame.pivotTable (fun _ r -> r.GetAs<string>("Key")) (fun _ r -> r.GetAs<string>("Attribute")) (fun frm -> frm.GetColumn("Value") |> Series.firstValue) df1.Print(true)
运行后会得到你期望的结果:
A B (DateTime) (DateTime) K1 -> 1/1/2000 12:00:00 AM <missing> K2 -> 2/2/2020 12:00:00 AM 3/3/2030 12:00:00 AM
关键说明
Series.firstValue会直接返回分组序列中的第一个值,若原数据为缺失值,会保留<missing>标记,完美适配你的需求。- 如果后续遇到同一
Key+Attribute组合有多行数据的场景,可根据业务需求替换为Series.lastValue,或自定义逻辑提取目标值。
内容的提问来源于stack exchange,提问作者jim108dev
相关产品推荐
相关产品推荐

