据我所知,Deedle 框架仅按索引排序。有没有办法应用自定义排序功能或按给定系列排序(并定义升序/降序)?
问问题
681 次
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 回答