ecj*_*cjb 6 dataframe julia calculation
我想计算 A 列的平方,1,2,3,4用其他计算处理它,将其存储在 C 列中
using CSV, DataFrames
df = DataFrame(A = 1:4, B = ["M", "F", "F", "M"])
df.C = ((((df.A./2).^2).*3.14)./1000)
Run Code Online (Sandbox Code Playgroud)
有没有更简单的写法?
尝试这个:
df.D = .5df.A .^2 * 0.00314
Run Code Online (Sandbox Code Playgroud)
解释:
一个简单的基准测试使用BenchmarkTools:
julia> @btime $df.E = .5*$df.A .^2 * 0.00314;
592.085 ns (9 allocations: 496 bytes)
julia> @btime $df.F = @. ($df.A / 2) ^ 2 * 0.00314;
875.490 ns (11 allocations: 448 bytes)
Run Code Online (Sandbox Code Playgroud)
然而,最快的是提供类型信息的较长版本@. (df.A::Vector{Int} / 2) ^ 2 * 0.00314(同样,这对于短DataFrames 来说很重要,请注意,此处的Z列必须存在,因此我们在此处创建它):
julia> @btime begin $df.Z = Vector{Float64}(undef, nrow(df));@. $df.Z = ($df.A::Vector{Int} / 2.0) ^ 2.0 * 0.00314; end;
162.564 ns (3 allocations: 208 bytes)
Run Code Online (Sandbox Code Playgroud)