Deedle F# - 查找索引组中的最大行数
Deedle F# - Find the max rows within an index group
我正在尝试获取 deedle 数据框中组内第一个值和最后一个值之间的差异。我坚持尝试获取每个点的最大值和最小值。我有一个按 "TimeStamp" 排序的数据框,按 "Test" 分组,并且有一个名为 "Value" 的浮点类型的列。例如使用以下数据:
Test1,2018/01/01 => 3
Test1,2018/01/02 => 5
Test1,2018/01/03 => 15
Test1,2018/01/04 => 25
Test1,2018/01/05 => 35
Test2,2018/01/01 => 5
Test2,2018/01/02 => 15
Test2,2018/01/03 => 15
Test2,2018/01/04 => 25
Test2,2018/01/05 => 30
我期待
的结果
Test1 => 32 (35-3)
Test2 => 25 (30-5)
我想我可以使用类似
的东西
input |> applyLevel fst Stats.maxBy |> Frame.ofRows
input |> applyLevel fst Stats.minBy |> Frame.ofRows
但无论组合如何,我似乎都无法让它工作。
提前致谢
为了对此进行测试,我将您的样本数据保存在 CSV 文件中,格式如下:
Category, Timestamp, Value
Test1, 2018/01/01, 3
Test1, 2018/01/02, 5
Test1, 2018/01/03, 15
Test1, 2018/01/04, 25
Test1, 2018/01/05, 35
Test2, 2018/01/01, 5
Test2, 2018/01/02, 15
Test2, 2018/01/03, 15
Test2, 2018/01/04, 25
Test2, 2018/01/05, 30
现在,我认为使用 Stats.max
和 Stats.min
的问题在于它们的 return 选项是 None
当系列为空时 - 这很遗憾不可能直接传给applyLevel
(我承认这个设计有点不方便)
但是,您可以将自定义函数传递给 applyLevel
,这也允许您同时执行 min
和 max
:
Frame.ReadCsv("sample.csv")
|> Frame.groupRowsByString "Category"
|> Frame.applyLevel fst (fun s ->
match Stats.min s, Stats.max s with
| Some lo, Some hi -> hi - lo
| _ -> nan)
这会读取 CSV 文件(这将引入一个新的序号键),然后按类别对数据进行分组(这会为您提供一个具有行键 string * int
的数据框),然后我们将所有行汇总为使用 applyLevel fst
的相同 string
键。自定义函数获取值系列的最小值和最大值并将其减去(nan
的情况只有在 s
中有一些缺失值时才会发生)。
我正在尝试获取 deedle 数据框中组内第一个值和最后一个值之间的差异。我坚持尝试获取每个点的最大值和最小值。我有一个按 "TimeStamp" 排序的数据框,按 "Test" 分组,并且有一个名为 "Value" 的浮点类型的列。例如使用以下数据:
Test1,2018/01/01 => 3
Test1,2018/01/02 => 5
Test1,2018/01/03 => 15
Test1,2018/01/04 => 25
Test1,2018/01/05 => 35
Test2,2018/01/01 => 5
Test2,2018/01/02 => 15
Test2,2018/01/03 => 15
Test2,2018/01/04 => 25
Test2,2018/01/05 => 30
我期待
的结果Test1 => 32 (35-3)
Test2 => 25 (30-5)
我想我可以使用类似
的东西input |> applyLevel fst Stats.maxBy |> Frame.ofRows
input |> applyLevel fst Stats.minBy |> Frame.ofRows
但无论组合如何,我似乎都无法让它工作。
提前致谢
为了对此进行测试,我将您的样本数据保存在 CSV 文件中,格式如下:
Category, Timestamp, Value
Test1, 2018/01/01, 3
Test1, 2018/01/02, 5
Test1, 2018/01/03, 15
Test1, 2018/01/04, 25
Test1, 2018/01/05, 35
Test2, 2018/01/01, 5
Test2, 2018/01/02, 15
Test2, 2018/01/03, 15
Test2, 2018/01/04, 25
Test2, 2018/01/05, 30
现在,我认为使用 Stats.max
和 Stats.min
的问题在于它们的 return 选项是 None
当系列为空时 - 这很遗憾不可能直接传给applyLevel
(我承认这个设计有点不方便)
但是,您可以将自定义函数传递给 applyLevel
,这也允许您同时执行 min
和 max
:
Frame.ReadCsv("sample.csv")
|> Frame.groupRowsByString "Category"
|> Frame.applyLevel fst (fun s ->
match Stats.min s, Stats.max s with
| Some lo, Some hi -> hi - lo
| _ -> nan)
这会读取 CSV 文件(这将引入一个新的序号键),然后按类别对数据进行分组(这会为您提供一个具有行键 string * int
的数据框),然后我们将所有行汇总为使用 applyLevel fst
的相同 string
键。自定义函数获取值系列的最小值和最大值并将其减去(nan
的情况只有在 s
中有一些缺失值时才会发生)。