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