Output to multiple target columns via transform in DataFrames Minilanguage

Let me write what I understand you want. But if you want something else please comment:

julia> gdf = groupby(DataFrame(id=1:3, A=11:13, B=101:103), :id)
GroupedDataFrame with 3 groups based on key: id
First Group (1 row): id = 1
 Row │ id     A      B
     │ Int64  Int64  Int64
─────┼─────────────────────
   1 │     1     11    101
⋮
Last Group (1 row): id = 3
 Row │ id     A      B
     │ Int64  Int64  Int64
─────┼─────────────────────
   1 │     3     13    103

julia> fun(a, b, p1, p2) = (x=a*p1, y=b*p2, z=(a+b)*p1*p2)
fun (generic function with 1 method)

julia> transform(gdf, [:A, :B ] => ((a, b ) -> fun(a,b, p1,p2)) => AsTable)
3×6 DataFrame
 Row │ id     A      B      x      y       z
     │ Int64  Int64  Int64  Int64  Int64   Int64
─────┼─────────────────────────────────────────────
   1 │     1     11    101    110  101000  1120000
   2 │     2     12    102    120  102000  1140000
   3 │     3     13    103    130  103000  1160000

julia> transform(gdf, [:A, :B ] => ((a, b ) -> fun(a,b, p1,p2)) => [:NewA, :NewB, :NewAB])
3×6 DataFrame
 Row │ id     A      B      NewA   NewB    NewAB
     │ Int64  Int64  Int64  Int64  Int64   Int64
─────┼─────────────────────────────────────────────
   1 │     1     11    101    110  101000  1120000
   2 │     2     12    102    120  102000  1140000
   3 │     3     13    103    130  103000  1160000

and a second example with matrix:

julia> fun2(a, b, p1, p2) = [a*p1 b*p2 (a+b)*p1*p2]
fun2 (generic function with 1 method)

julia> transform(gdf, [:A, :B ] => ((a, b ) -> fun2(a,b, p1,p2)) => [:NewA, :NewB, :NewAB])
3×6 DataFrame
 Row │ id     A      B      NewA   NewB    NewAB
     │ Int64  Int64  Int64  Int64  Int64   Int64
─────┼─────────────────────────────────────────────
   1 │     1     11    101    110  101000  1120000
   2 │     2     12    102    120  102000  1140000
   3 │     3     13    103    130  103000  1160000

julia> transform(gdf, [:A, :B ] => ((a, b ) -> fun2(a,b, p1,p2)) => AsTable)
3×6 DataFrame
 Row │ id     A      B      x1     x2      x3
     │ Int64  Int64  Int64  Int64  Int64   Int64
─────┼─────────────────────────────────────────────
   1 │     1     11    101    110  101000  1120000
   2 │     2     12    102    120  102000  1140000
   3 │     3     13    103    130  103000  1160000
2 Likes