操作DataFrame中的数据:如何计算一列的平方

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)

有没有更简单的写法?

Prz*_*fel 3

尝试这个:

df.D = .5df.A .^2 * 0.00314
Run Code Online (Sandbox Code Playgroud)

解释:

  • 不需要那么多括号
  • 标量乘以向量与短向量的向量化一样好(最多两个,大约 100 个元素)

一个简单的基准测试使用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)