极坐标选择多个元素乘积

问题描述 投票:0回答:1

假设我有以下数据框:

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']

是否有使用

.select()
在 x1/y1 和 x2/y2 之间添加乘积的好方法?所以结果应该如下所示。具体来说,我想使用列表而不是写出
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   │
└─────┴─────┴─────┴─────┴─────┴─────┘
python dataframe python-polars
1个回答
0
投票

你可以这样做:

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   │
└─────┴─────┴─────┴─────┴─────┴─────┘
© www.soinside.com 2019 - 2024. All rights reserved.