我最近开始学习数据科学的F#(来自简单的C#和Python)。我开始习惯于科学的功能性第一范式的力量。
但是,对于如何使用Python中的熊猫可以轻松解决的问题,我仍然感到困惑。它与多索引时间序列/数据帧有关。我已经对Deedle进行了广泛的检查,但是我仍然不确定Deedle是否可以帮助我达到这样的水平:
Column Index 1: A || B
Column Index 2: A1 A2 || B1 B2
Column Index 3: p1 p2 | p1 p2 || p1 p2 | p1 p2
Row Index:
date1 0.5 2. | 2. 0.5 || 3. 0. | 2. 3.
date2 ......
当Index1 = A等时,能够求和所有p1系列的想法
我没有用Deedle找到这种事的例子。
如果该数据不可用,您会建议我使用哪种数据结构?
感谢您在F#中帮助新手(但很喜欢)
答案 0 :(得分:3)
在Deedle中,您可以使用元组作为键来创建具有层次结构索引的框架或系列:
let ts =
series
[ ("A", "A1", "p1") => 0.5
("A", "A1", "p2") => 2.
("A", "A2", "p3") => 2.
("A", "A2", "p4") => 0.5 ]
Deedle对此有一些特殊处理。例如,它将数据输出为:
A A1 p1 -> 0.5
p2 -> 2
A2 p3 -> 2
p4 -> 0.5
要将聚合应用于层次结构的一部分,可以使用applyLevel
函数:
ts |> Series.applyLevel (fun (l1, l2, l3) -> l1) Stats.mean
ts |> Series.applyLevel (fun (l1, l2, l3) -> l1, l2) Stats.mean
第一个参数是一个函数,该函数获取键的元组并选择要分组的级别的哪一部分-因此以上两个分别在顶部和顶部两个级别上创建了一个聚合。