# Efficient generation of random number from 2 columns in a dataframe

**URL:** <https://discourse.julialang.org/t/efficient-generation-of-random-number-from-2-columns-in-a-dataframe/68824>\
**Category:** General Usage\
**Tags:** question, dataframes\
**Created:** [September 27, 2021, 5:01pm UTC](https://discourse.julialang.org/t/efficient-generation-of-random-number-from-2-columns-in-a-dataframe/68824 "2021-09-27T17:01:52Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![CompulsoryCoffee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/compulsorycoffee/32/30434_2.png) [@CompulsoryCoffee](https://discourse.julialang.org/u/CompulsoryCoffee)\
**Post date:** [September 27, 2021, 5:01pm UTC](https://discourse.julialang.org/t/efficient-generation-of-random-number-from-2-columns-in-a-dataframe/68824/1 "2021-09-27T17:01:52Z")

</div>

Hi,

If I have a column with the mean and another one with the standard deviation - how to create a new column with this function:

```julia
rng(m,s) = rand(Normal(m, s), 1)

```

The fastest option is preferred …

Thanks!

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [September 27, 2021, 5:09pm UTC](https://discourse.julialang.org/t/efficient-generation-of-random-number-from-2-columns-in-a-dataframe/68824/2 "2021-09-27T17:09:41Z")

</div>

using DataFramesMeta, you can do

```julia
julia> using DataFramesMeta, Distributions

julia> df = DataFrame(m = [1, 2, 2, 4], s = [.5, .6, .2, .1])
4×2 DataFrame
 Row │ m s       
     │ Int64 Float64 
─────┼────────────────
   1 │ 1 0.5
   2 │ 2 0.6
   3 │ 2 0.2
   4 │ 4 0.1

julia> @rtransform df :r = rand(Normal(:m, :s))
4×3 DataFrame
 Row │ m s r       
     │ Int64 Float64 Float64 
─────┼─────────────────────────
   1 │ 1 0.5 1.45605
   2 │ 2 0.6 1.8666
   3 │ 2 0.2 2.0909
   4 │ 4 0.1 4.09518

```

---

<div class="post-metadata">

**Author:** ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)\
**Post date:** [September 27, 2021, 5:18pm UTC](https://discourse.julialang.org/t/efficient-generation-of-random-number-from-2-columns-in-a-dataframe/68824/3 "2021-09-27T17:18:34Z")

</div>

Without macros,

```julia
julia> df = DataFrame(m = [1, 2, 2, 4], s = [.5, .6, .2, .1])
4×2 DataFrame
 Row │ m s       
     │ Int64 Float64 
─────┼────────────────
   1 │ 1 0.5
   2 │ 2 0.6
   3 │ 2 0.2
   4 │ 4 0.1

julia> transform(df, [:m,:s] => ByRow((m,s)->rand(Normal(m,s))) => :r)
4×3 DataFrame
 Row │ m s r        
     │ Int64 Float64 Float64  
─────┼──────────────────────────
   1 │ 1 0.5 0.982336
   2 │ 2 0.6 2.38128
   3 │ 2 0.2 2.29904
   4 │ 4 0.1 3.989

```

---

<div class="post-metadata">

**Author:** ![sijo](https://avatars.discourse-cdn.com/v4/letter/s/da6949/32.png) [@sijo](https://discourse.julialang.org/u/sijo)\
**Post date:** [September 27, 2021, 6:23pm UTC](https://discourse.julialang.org/t/efficient-generation-of-random-number-from-2-columns-in-a-dataframe/68824/4 "2021-09-27T18:23:34Z")

</div>

Or like this:

```julia
df.r = rng.(df.m, df.s)

```

or if you haven’t already defined `rng`, you can do

```julia
df.r = rand.(Normal.(df.m, df.s))

```

---

<div class="post-metadata">

**Author:** ![CompulsoryCoffee](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/compulsorycoffee/32/30434_2.png) [@CompulsoryCoffee](https://discourse.julialang.org/u/CompulsoryCoffee)\
**Post date:** [September 29, 2021, 12:07pm UTC](https://discourse.julialang.org/t/efficient-generation-of-random-number-from-2-columns-in-a-dataframe/68824/5 "2021-09-29T12:07:58Z")

</div>

Thanks all!
