假设我有一个数据帧,它有一个名为mean
的列,我想将其用作随机数生成器的输入.来自R,这在管道中相对容易完成:
library(dplyr)
tibble(alpha = rnorm(1000),
beta = rnorm(1000)) %>%
mutate(mean = alpha + beta) %>%
bind_cols(random_output = rnorm(n = nrow(.), mean = .$mean, sd = 1))
#> # A tibble: 1,000 × 4
#> alpha beta mean random_output
#> <dbl> <dbl> <dbl> <dbl>
#> 1 0.231 -0.243 -0.0125 0.551
#> 2 0.213 0.647 0.861 0.668
#> 3 0.824 -0.353 0.471 0.852
#> 4 0.665 -0.916 -0.252 -1.81
#> 5 -0.850 0.384 -0.465 -3.90
#> 6 0.721 0.679 1.40 2.54
#> 7 1.46 0.857 2.32 2.14
#> 8 -0.242 -0.431 -0.673 -0.820
#> 9 0.234 0.188 0.422 -0.662
#> 10 -0.494 -2.15 -2.65 -3.01
#> # ℹ 990 more rows
创建于2023-11-12年第reprex v2.0.2页
在Python语言中,我可以创建一个中间数据帧并将其用作np.random.normal()
的输入,然后将其绑定到数据帧,但这感觉很笨拙.有没有办法将random_output
COL作为管道/链的一部分添加?
import polars as pl
import numpy as np
# create a df
df = (
pl.DataFrame(
{
"alpha": np.random.standard_normal(1000),
"beta": np.random.standard_normal(1000)
}
)
.with_columns(
(pl.col("alpha") + pl.col("beta")).alias("mean")
)
)
# create an intermediate object
sim_vals = np.random.normal(df.get_column("mean"))
# bind the simulated values to the original df
(
df.with_columns(random_output = pl.lit(sim_vals))
)
#> shape: (1_000, 4)
┌───────────┬───────────┬───────────┬───────────────┐
│ alpha ┆ beta ┆ mean ┆ random_output │
│ --- ┆ --- ┆ --- ┆ --- │
│ f64 ┆ f64 ┆ f64 ┆ f64 │
╞═══════════╪═══════════╪═══════════╪═══════════════╡
│ -1.380249 ┆ 1.531959 ┆ 0.15171 ┆ 0.938207 │
│ -0.332023 ┆ -0.108255 ┆ -0.440277 ┆ 0.081628 │
│ -0.718319 ┆ -0.612187 ┆ -1.330506 ┆ -1.286229 │
│ 0.22067 ┆ -0.497258 ┆ -0.276588 ┆ 0.908147 │
│ … ┆ … ┆ … ┆ … │
│ 0.299117 ┆ -0.371846 ┆ -0.072729 ┆ 0.592632 │
│ 0.789633 ┆ 0.95712 ┆ 1.746753 ┆ 2.954801 │
│ -0.264415 ┆ -0.761634 ┆ -1.026049 ┆ -1.369753 │
│ 1.893911 ┆ 1.554736 ┆ 3.448647 ┆ 5.192537 │
└───────────┴───────────┴───────────┴───────────────┘