2

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

4

3 回答 3

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]

whilereorder 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 帧排序方法的阻碍。

于 2013-12-10T08:51:11.273 回答
1

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

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

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

于 2016-11-20T14:06:51.283 回答
0

Deedle 1.0 具有额外的行和列排序功能

  • Frame.sortRows
  • Frame.sortRowsWith
  • Frame.sortRowsBy
于 2014-05-30T13:17:33.033 回答