Return `DataFrames.jl` 中的最大总和?
Return the maximum sum in `DataFrames.jl`?
假设我的 DataFrame 有两列 v
和 g
。首先,我按 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
和 v
的值:
julia> v, g = findmax(x-> (x.v, x.g), eachrow(gdt))[1]
(4.343050512360169, 3)
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
假设我的 DataFrame 有两列 v
和 g
。首先,我按 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
和 v
的值:
julia> v, g = findmax(x-> (x.v, x.g), eachrow(gdt))[1]
(4.343050512360169, 3)
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