首页 > 解决方案 > Julia:如何通过使用“transform”或“@transform”添加两列来在 DataFrames.jl 中创建一个新列?

问题描述

using DataFrames

df = DataFrame(a=1:3, b=1:3)

如何创建一个新列c,以便c = a+b元素明智?

transform通过阅读文档无法弄清楚。

我知道

df[!, :c] = df.a .+ df.b

有效,但我想transform在这样的链中使用

@chain df begin
  @transform(c = :a .+ :b)
  @where(...)
  groupby(...)
end

上述语法不适用于 DataFramesMeta.jl

标签: dataframejulia

解决方案


这是使用 DataFrames.jl 的答案。

创建一个新的数据框:

julia> transform(df, [:a,:b] => (+) => :c)
3×3 DataFrame
 Row │ a      b      c     
     │ Int64  Int64  Int64 
─────┼─────────────────────
   1 │     1      1      2
   2 │     2      2      4
   3 │     3      3      6

对于就地操作:

julia> transform!(df, [:a,:b] => (+) => :c)
3×3 DataFrame
 Row │ a      b      c     
     │ Int64  Int64  Int64 
─────┼─────────────────────
   1 │     1      1      2
   2 │     2      2      4
   3 │     3      3      6

或者

julia> insertcols!(df, :c => df.a + df.b)
3×3 DataFrame
 Row │ a      b      c     
     │ Int64  Int64  Int64 
─────┼─────────────────────
   1 │     1      1      2
   2 │     2      2      4
   3 │     3      3      6

transform!和之间的区别在于,如果数据框中存在列,则会出错,而insertcols!insertcols!覆盖它。:ctransform!


推荐阅读