Предположим, у меня есть следующий фрейм данных:
the_df = pl.DataFrame({'x1': [1,1,1], 'x2': [2,2,2], 'y1': [1,1,1], 'y2': [2,2,2]})
┌─────┬─────┬─────┬─────┐
│ x1 ┆ x2 ┆ y1 ┆ y2 │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╡
│ 1 ┆ 2 ┆ 1 ┆ 2 │
│ 1 ┆ 2 ┆ 1 ┆ 2 │
│ 1 ┆ 2 ┆ 1 ┆ 2 │
└─────┴─────┴─────┴─────┘
И два списка, xs = ['x1', 'x2']
, ys = ['y1', 'y2']
.
Есть ли хороший способ добавить товары между x1/y1 и x2/y2 с помощью .select()
? Таким образом, результат должен выглядеть следующим образом. В частности, я хочу использовать списки, а не записывать z1=x1*y1, z2=x2*y2
(реальные данные содержат больше членов, которые я хочу умножить).
┌─────┬─────┬─────┬─────┬─────┬─────┐
│ x1 ┆ x2 ┆ y1 ┆ y2 ┆ z1 ┆ z2 │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╪═════╪═════╡
│ 1 ┆ 2 ┆ 1 ┆ 2 ┆ 1 ┆ 4 │
│ 1 ┆ 2 ┆ 1 ┆ 2 ┆ 1 ┆ 4 │
│ 1 ┆ 2 ┆ 1 ┆ 2 ┆ 1 ┆ 4 │
└─────┴─────┴─────┴─────┴─────┴─────┘
вы можете сделать что-то вроде этого:
zs = ['z1','z2']
df.with_columns(
(pl.col(xc) * pl.col(yc)).alias(zc) for xc, yc, zc in zip(xs, ys, zs)
)
┌─────┬─────┬─────┬─────┬─────┬─────┐
│ x1 ┆ x2 ┆ y1 ┆ y2 ┆ z1 ┆ z2 │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╪═════╪═════╪═════╡
│ 1 ┆ 2 ┆ 1 ┆ 2 ┆ 1 ┆ 4 │
│ 1 ┆ 2 ┆ 1 ┆ 2 ┆ 1 ┆ 4 │
│ 1 ┆ 2 ┆ 1 ┆ 2 ┆ 1 ┆ 4 │
└─────┴─────┴─────┴─────┴─────┴─────┘