将函数应用于 Polars 中的 2 列

Mai*_*ova 4 python-polars

我想应用一个自定义函数,该函数需要 2 列并根据这些列(基于行)输出一个值

在 Pandas 中,有一种语法可以根据多列中的值应用函数

df['col_3'] = df.apply(lambda x: func(x.col_1, x.col_2), axis=1)
Run Code Online (Sandbox Code Playgroud)

Polars 中的语法是什么?

Dea*_*gor 12

在极坐标中,您不能通过仅分配新列的值来添加列。你总是必须分配整个 df (换句话说,永远不会['col_3']在 的左侧=

为此,如果您希望原始 df 具有新列,则可以使用该with_columns方法。

你会做

df = df.with_columns(pl.struct(['col_1','col_2']) \
       .map_elements(lambda x: func(x['col_1'], x['col_2'])).alias('col_3'))
Run Code Online (Sandbox Code Playgroud)

结构体是数据框列内的数据框。这很有用,因为map_elements(实际上是所有表达式)只能从单个列调用。将map_elements每行中的结构转换为字典,并成为函数的输入。map_elements适用于采用单个输入并输出单个值的函数。(如果您使用的向量化函数需要一个列表之类的东西并返回另一个列表,那么您应该使用map_batches)。最后,您可以alias为其指定您想要的名称。