Python 极坐标:将命名行传递给 pl.DataFrame.map_rows

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

我正在寻找一种方法来应用用户定义的函数,在使用

pl.DataFrame.map_rows
时将参数的字典而不是元组作为输入。

尝试类似的事情

df.map_rows(lambda x: udf({k:v for k, v in zip(df.columns, x)}))

我得到了一个

RuntimeError: Already mutably borrowed

在文档中说:

帧级map_rows无法跟踪列名(因为UDF是一个黑盒子,可以任意删除、重新排列、转换或添加新列);如果您想应用 UDF 来保留列名,则应使用表达式级 map_elements 语法。

但是这如何防止 Polars 将字典而不是元组传递给

udf
呢?就像打电话
df.row(i, named=True)
一样。为什么结构体无法命名?

我知道我可以迭代

df.rows()
并执行用户定义的操作,然后转换回
pl.DataFrame
,但我希望有一种方法可以在不离开 Polars API 的情况下完成此操作。

python dataframe user-defined-functions python-polars
1个回答
0
投票

我对潜在的 Rust 动态了解不够,但在调用

df.columns
之前捕获
map_rows
似乎有效。

cols = df.columns
df.map_rows(lambda x: udf({k:v for k, v in zip(cols, x)}))

此外,您可以使用

dict()
构造函数来简化字典的创建。

cols = df.columns
df.map_rows(lambda x: udf(dict(zip(cols, x))))
© www.soinside.com 2019 - 2024. All rights reserved.