如果我有一个包含[城市、经销商、售出汽车总数]的数据集。我如何获得每个城市的顶级经销商以及他们销售的汽车数量?
结果应该是这样的
City1 Dealership A 2000
City2 Dealership X 1000
etc.
我确信这是可能的,但我没有任何运气,这可能是因为我以错误的方式处理问题。
目前,我按经销商和城市进行分组,这创建了 Frame<(string*string*int), int>
这让我很感动
City1 Dealership A 1 -> 2000
City1 Dealership B 2 -> 1000
City2 Dealership X 3 -> 1000
City2 Dealership Y 4 -> 500
etc.
但是试图找到做最多交易的经销商是我遇到的困难。
谢谢。
最佳答案
我改编了托马斯的答案并将类型输出为 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)
已编辑
我假设你有一个像这样的 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 )
关于f# - 在 Deedle 中查找每个分层索引的 Stats.max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60216780/