假设我的DataFrame有两列v和g。首先,我将DataFrame按列g分组,并计算出列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发布于 2021-12-29 10:00:36
我不确定这是否是您的意思,但您可以使用以下命令一步检索g和v的值:
julia> v, g = findmax(x-> (x.v, x.g), eachrow(gdt))[1]
(4.343050512360169, 3)发布于 2021-12-29 16:29:20
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或(海事组织更容易理解):
julia> @chain dt begin
@by(:g, :sv = sum(:v))
maximum(_.sv)
end
2.7572966050340257https://stackoverflow.com/questions/70515278
复制相似问题