Я адаптировал ответ Томаса и вывел тип как Series<string, (string * int)>
let data = series [
("City1", "Dealership A") => 2000
("City1", "Dealership B") => 1000
("City2", "Dealership X") => 1000
("City2", "Dealership Y") => 500 ]
data
|> Series.groupBy (fun k _ -> fst k)
|> Series.mapValues (fun sr ->
let sorted = sr |> Series.sortBy(fun x -> -x)
let key = sorted |> Series.firstKey |> snd
let value = sorted |> Series.firstValue
key, value )
Вывод выглядит как
City1 -> (Dealership A, 2000)
City2 -> (Dealership X, 1000)
EDITED
Я предполагаю, что у вас есть CSV-файл, подобный этому
City,Dealership,TotalCarsSold
City1,Dealership A,2000
City1,Dealership B,1000
City2,Dealership X,1000
City2,Dealership Y,500
Вот как я это сделаю. Прочитайте его как Frame
, получите столбец как Series
и примените тот же код выше, чтобы получить результат.
let df =
Frame.ReadCsv("C:/Temp/dealership.csv")
|> Frame.indexRowsUsing(fun r -> r.GetAs<string>("City"), r.GetAs<string>("Dealership"))
df?TotalCarsSold
|> Series.groupBy (fun k _ -> fst k)
|> Series.mapValues (fun sr ->
let sorted = sr |> Series.sortBy(fun x -> -x)
let key = sorted |> Series.firstKey |> snd
let value = sorted |> Series.firstValue
key, value )