我有以下数据框
import polars as pl
data = {
'col': [[11, 21, 31, 41, 51], [12, 22, 32, 42, 52], [13, 23, 33, 43, 53]]
}
df = pl.DataFrame(data)
shape: (3, 1)
┌────────────────┐
│ col │
│ --- │
│ list[i64] │
╞════════════════╡
│ [11, 21, … 51] │
│ [12, 22, … 52] │
│ [13, 23, … 53] │
└────────────────┘
从每个列表的第一个元素开始,我想用一个数字除以列表的每两个元素,然后从列表的第二个元素开始,再用另一个数字除以每两个元素。例如,如果这两个数字分别是 5 和 10,第一个列表将像这样变换
[11/5, 12/10, 13/5, 14/10, 15/5]
导致
[2.2, 1.2, 2.6, 1.4, 3]
我想对该列的所有列表进行相同的转换。我如何使用 Polars API 来做到这一点?
使用
list.eval
以及何时/那么/否则
import polars as pl
data = {
'col': [[11, 21, 31, 41, 51], [12, 22, 32, 42, 52], [13, 23, 33, 43, 53]]
}
df = pl.DataFrame(data)
def func(x):
return pl.when(
pl.element().cum_count()%2 == 0
).then(x/5).otherwise(x/10)
df.select(result = pl.col('col').list.eval(func(pl.element())))
shape: (3, 1)
┌────────────────────┐
│ result │
│ --- │
│ list[f64] │
╞════════════════════╡
│ [2.2, 2.1, … 10.2] │
│ [2.4, 2.2, … 10.4] │
│ [2.6, 2.3, … 10.6] │
└────────────────────┘