我有一个pl.DataFrame
包含如下列表的列:
import polars as pl
df = pl.DataFrame(
{
"symbol": ["A", "A", "B", "B"],
"roc": [[0.1, 0.2], [0.3, 0.4], [0.5, 0.6], [0.7, 0.8]],
}
)
shape: (4, 2)
┌────────┬────────────┐
│ symbol ┆ roc │
│ --- ┆ --- │
│ str ┆ list[f64] │
╞════════╪════════════╡
│ A ┆ [0.1, 0.2] │
│ A ┆ [0.3, 0.4] │
│ B ┆ [0.5, 0.6] │
│ B ┆ [0.7, 0.8] │
└────────┴────────────┘
此外,我有一个常规的 python 列表weights = [0.3, 0.7]
pl.col("roc")
将乘以的一种有效方法是什么?weights
即将 列的第一个和第二个元素分别与 的第一个和第二个元素相乘weights
?
预期输出如下:
shape: (4, 3)
┌────────┬────────────┐──────────────┐
│ symbol ┆ roc │ roc_wgt │
│ --- ┆ --- │ --- │
│ str ┆ list[f64] │ list[f64] │
╞════════╪════════════╡══════════════╡
│ A ┆ [0.1, 0.2] │ [0.03, 0.14] │ = [0.1 * 0.3, 0.2 * 0.7]
│ A ┆ [0.3, 0.4] │ [0.09, 0.28] │ = [0.3 * 0.3, 0.4 * 0.7]
│ B ┆ [0.5, 0.6] │ [0.15, 0.42] │ = [0.5 * 0.3, 0.6 * 0.7]
│ B ┆ [0.7, 0.8] │ [0.21, 0.56] │ = [0.7 * 0.3, 0.8 * 0.7]
└────────┴────────────┘──────────────┘
有一个待处理的 PR 允许
pl.col.roc * pl.lit(weights)
还有
Array
固定宽度类型。由于目前情况紧急,因此需要添加一列
pl.lit()
。首先运行的一个选项
explode
:输出:
或者,使用
map_elements
:输出:
您还可以遍历权重列表,从列中获取相应的元素,将它们相乘并将这些结果连接在一起形成一个新列表。
不幸的是,polars 目前还不支持对列表进行此类操作,但它支持对结构进行此类操作: