f# - 在 Deedle 中查找每个分层索引的 Stats.max

标签 f# deedle

如果我有一个包含[城市、经销商、售出汽车总数]的数据集。我如何获得每个城市的顶级经销商以及他们销售的汽车数量?

结果应该是这样的

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/

相关文章:

F# - "it"关键字是什么?

f# - 构建代码表达式 "Manually"

f# - 这个高阶函数有名字吗?

f# - 如何重新排序这些 F# 函数以使其有意义?

F# : getting rows/column names 的 JSON 类型提供程序

dictionary - 映射到 Deedle 框架

mysql - 来自数据库的 Deedle Frame,什么是 Schema?

F# 类型提供程序和持续集成

c# - 在 Deedle 中选择特定行

f# - Series.hasNot 中有错误吗?