有没有更好的方法来找到 Deedle 系列中缺失值的第一个键?
Is there a better way to find the first key of a missing value in a Deedle Series?
我需要找到 Deedle 系列中第一个缺失值的键。我能够编写下面的函数,它似乎可以工作。我想知道 Deedle 是否有更好的方法,更普遍的是一个快速函数 returns 所有缺失(或非缺失)值的键。
let firstMissing (s: Series<'a,_>) =
let e = (s.Keys).GetEnumerator()
let rec loop () =
if e.MoveNext() then
if s |> Series.has e.Current then loop ()
else e.Current |> Some
else None
loop ()
let s2 = Series.ofOptionalObservations [ 1 => Some(1.0); 2 => None ]
// val it : Series<int,float> =
series [ 1 => 1; 2 => <missing>]
firstMissing s2
val it : int option = Some 2
let s4 = Series.ofValues [1..4]
firstMissing s4
val it : int option = None
我认为除了扫描密钥直到找到一个没有值的密钥之外,没有任何主要不同的选择,但是您可以使用 Series.observationsAll
和 returns 更好地做到这一点一系列键,与可选值配对:
s2 |> Series.observationsAll |> Seq.tryPick (function (k, None) -> Some k | _ -> None)
如果所有键都有值,returns None
,否则 Some k
第一个键没有值。
我需要找到 Deedle 系列中第一个缺失值的键。我能够编写下面的函数,它似乎可以工作。我想知道 Deedle 是否有更好的方法,更普遍的是一个快速函数 returns 所有缺失(或非缺失)值的键。
let firstMissing (s: Series<'a,_>) =
let e = (s.Keys).GetEnumerator()
let rec loop () =
if e.MoveNext() then
if s |> Series.has e.Current then loop ()
else e.Current |> Some
else None
loop ()
let s2 = Series.ofOptionalObservations [ 1 => Some(1.0); 2 => None ]
// val it : Series<int,float> =
series [ 1 => 1; 2 => <missing>]
firstMissing s2
val it : int option = Some 2
let s4 = Series.ofValues [1..4]
firstMissing s4
val it : int option = None
我认为除了扫描密钥直到找到一个没有值的密钥之外,没有任何主要不同的选择,但是您可以使用 Series.observationsAll
和 returns 更好地做到这一点一系列键,与可选值配对:
s2 |> Series.observationsAll |> Seq.tryPick (function (k, None) -> Some k | _ -> None)
如果所有键都有值,returns None
,否则 Some k
第一个键没有值。