我可以对Deedle框架进行排序吗?

时间:2013-12-09 22:43:03

标签: f# deedle

据我所知,Deedle框架只按索引排序。有没有办法应用自定义排序函数或按给定系列排序(并定义升序/降序)?

3 个答案:

答案 0 :(得分:4)

坚持Frame<int,string>类型的“标准”框架(整数的行索引和字符串的列名称)很容易实现一个能够根据升序或降序中的任何单个列内容重新排序框架的函数顺序:

let reorder isAscending sortColumnName (frame:Frame<int,string>)   =
    let result = frame |> Frame.indexRows sortColumnName
                       |> Frame.orderRows |> Frame.indexRowsOrdinally
    if isAscending then result else result |> Frame.mapRowKeys ((-) 0)
                                           |> Frame.orderRows
                                           |> Frame.indexRowsOrdinally

peopleList样本框架上的冒烟测试:

     Name    Age Countries          
0 -> Joe     51  [UK; US; UK]       
1 -> Tomas   28  [CZ; UK; US; CZ] 
2 -> Eve     2   [FR]               
3 -> Suzanne 15  [US] 

reorder false "Name" peopleList 会返回Name按降序排序的框架

     Name    Age Countries          
0 -> Tomas   28  [CZ; UK; US; CZ] 
1 -> Suzanne 15  [US]               
2 -> Joe     51  [UK; US; UK]       
3 -> Eve     2   [FR]

reorder true "Age" peopleList 会返回Age按升序排序的框架

     Name    Age Countries          
0 -> Eve     2   [FR]               
1 -> Suzanne 15  [US]               
2 -> Tomas   28  [CZ; UK; US; CZ] 
3 -> Joe     51  [UK; US; UK]

尽管如此,在有序列中缺少重复值的要求可能被视为这种Deedle帧排序方法的一个显示。

答案 1 :(得分:1)

您可以根据命名列中的值对Deedle框架进行排序,如下所示:

myFrame |> Frame.sortRowsBy "columnName" (fun v -> -v)(降序)

myFrame |> Frame.sortRowsBy "columnName" (fun v -> v)(升序)

答案 2 :(得分:0)

Deedle 1.0具有行和列的其他排序功能。 COLS

  • Frame.sortRows
  • Frame.sortRowsWith
  • Frame.sortRowsBy