F#Deedle和多索引

时间:2018-08-16 03:23:26

标签: dataframe f# deedle

我最近开始学习数据科学的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#中帮助新手(但很喜欢)

1 个答案:

答案 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

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