将列表中的每个第 n 个元素除以列表的极坐标 DataFrame 列中的数字

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

我有以下数据框

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 transformation python-polars
1个回答
0
投票

使用

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