首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回`DataFrames.jl`中的最大和?

返回`DataFrames.jl`中的最大和?
EN

Stack Overflow用户
提问于 2021-12-29 04:56:18
回答 2查看 103关注 0票数 5

假设我的DataFrame有两列vg。首先,我将DataFrame按列g分组,并计算出列v的和。其次,我使用函数maximum检索最大和。我想知道是否有可能在一步内检索值?谢谢。

代码语言:javascript
复制
julia> using Random

julia> Random.seed!(1)
TaskLocalRNG()

julia> dt = DataFrame(v = rand(15), g = rand(1:3, 15))
15×2 DataFrame
 Row │ v          g     
     │ Float64    Int64 
─────┼──────────────────
   1 │ 0.0491718      3
   2 │ 0.119079       2
   3 │ 0.393271       2
   4 │ 0.0240943      3
   5 │ 0.691857       2
   6 │ 0.767518       2
   7 │ 0.087253       1
   8 │ 0.855718       1
   9 │ 0.802561       3
  10 │ 0.661425       1
  11 │ 0.347513       2
  12 │ 0.778149       3
  13 │ 0.196832       1
  14 │ 0.438058       2
  15 │ 0.0113425      1

julia> gdt = combine(groupby(dt, :g), :v => sum => :v)
3×2 DataFrame
 Row │ g      v       
     │ Int64  Float64 
─────┼────────────────
   1 │     1  1.81257
   2 │     2  2.7573
   3 │     3  1.65398

julia> maximum(gdt.v)
2.7572966050340257
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-29 10:00:36

我不确定这是否是您的意思,但您可以使用以下命令一步检索gv的值:

代码语言:javascript
复制
julia> v, g = findmax(x-> (x.v, x.g), eachrow(gdt))[1]
(4.343050512360169, 3)
票数 2
EN

Stack Overflow用户

发布于 2021-12-29 16:29:20

DataFramesMeta.jl有一个@by宏:

代码语言:javascript
复制
julia> @by(dt, :g, :sv = sum(:v))
3×2 DataFrame
 Row │ g      sv      
     │ Int64  Float64 
─────┼────────────────
   1 │     1  1.81257
   2 │     2  2.7573
   3 │     3  1.65398

这为本文的第一部分提供了更清晰的语法。

有了它,你可以做以下任何一件事:

代码语言:javascript
复制
julia> @by(dt, :g, :sv = sum(:v)).sv |> maximum
2.7572966050340257

或(海事组织更容易理解):

代码语言:javascript
复制
julia> @chain dt begin
         @by(:g, :sv = sum(:v))
         maximum(_.sv)
       end
2.7572966050340257
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70515278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档