假设我有以下数据框:
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 │
└─────┴─────┴─────┴─────┴─────┴─────┘
你可以这样做:
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 │
└─────┴─────┴─────┴─────┴─────┴─────┘