【问题标题】:Return the maximum sum in `DataFrames.jl`?返回“DataFrames.jl”中的最大总和?
【发布时间】:2021-12-29 04:56:18
【问题描述】:

假设我的 DataFrame 有两列 vg。首先,我按g 列对DataFrame 进行分组,并计算v 列的总和。其次,我使用函数maximum 来检索最大和。我想知道是否可以一步检索该值?谢谢。

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


【问题讨论】:

  • 为了我正确理解您的问题,您正在寻找列 :g 指示的所有 3 个“类别”的总和的最大值?因为如果是这样,这似乎不是一个非常常规的操作,如果有更简单的方法可以做到这一点,我想知道。
  • 是的,这就是我想要的。

标签: julia dataframes.jl


【解决方案1】:

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

julia> v, g = findmax(x-> (x.v, x.g), eachrow(gdt))[1]
(4.343050512360169, 3)

【讨论】:

    【解决方案2】:

    DataFramesMeta.jl 有一个 @by 宏:

    
    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
    
    

    这为您的第一部分提供了一些更简洁的语法。

    有了它,您可以执行以下任一操作:

    julia> @by(dt, :g, :sv = sum(:v)).sv |> maximum
    2.7572966050340257
    
    

    或(IMO 更具可读性):

    julia> @chain dt begin
             @by(:g, :sv = sum(:v))
             maximum(_.sv)
           end
    2.7572966050340257
    

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多