据我所知,Deedle框架只按索引排序。有没有办法应用自定义排序函数或按给定系列排序(并定义升序/降序)?
答案 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