F# Deedle 和 Multi 索引

F# Deedle and Multi Index

我最近开始学习 F# for Data Science(来自简单的 C# 和 Python)。我开始习惯科学的功能第一范式的力量。

但是,我仍然对如何处理我可以在 Python 中使用 pandas 轻松解决的问题感到困惑。它与多索引时间序列/数据框有关。我已经广泛检查了 Deedle,但我仍然不确定 Deedle 是否可以帮助我实现这样的目标 table:

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# 中的新手(但爱上了)

在 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

第一个参数是一个函数,它获取键的元组并选择要分组的级别部分 - 因此以上两个参数分别在顶部和顶部两个级别上创建聚合。