我对 with_columns 中的 Polars LazyFrame“Structs”(pl.struct)和“apply”(又名 map_elements)有以下问题
这里的想法是尝试将自定义逻辑应用于属于多个列的一组值
我已经能够使用 DataFrames 实现这一点;但是,当切换到 LazyFrames 时,每当我尝试访问由结构发送到函数的字典中的列时,就会引发 KeyError。我逐一循环列,以便应用不同的函数(在其他地方映射到它们的名称,但在下面的示例中,为了简单起见,我将仅使用相同的函数)
my_df = pl.DataFrame(
{
"foo": ["a", "b", "c", "d"],
"bar": ["w", "x", "y", "z"],
"notes": ["1", "2", "3", "4"]
}
)
print(my_df)
cols_to_validate = ("foo", "bar")
def validate_stuff(value, notes):
# Any custom logic
if value not in ["a", "b", "x"]:
return f"FAILED {value} - PREVIOUS ({notes})"
else:
return notes
for col in cols_to_validate:
my_df = my_df.with_columns(
pl.struct([col, "notes"]).map_elements(
lambda row: validate_stuff(row[col], row["notes"])
).alias("notes")
)
print(my_df)
Run Code Online (Sandbox Code Playgroud)