代码之家  ›  专栏  ›  技术社区  ›  ViSa

无法在polars数据帧上应用用户定义的函数来创建新变量

  •  0
  • ViSa  · 技术社区  · 3 年前

    我正在尝试通过应用 lambda 函数,但获得 错误

    我尝试了以下代码:

    import polars as pl
    
    df_test2 = pl.DataFrame(
                    {
                        "a": [1, 8, 3],
                        "b": [4, 5, 9],
                    }
     )
    
    df_test2.with_columns(
        pl.all().apply(lambda x: (x - pl.mean(x))/x).suffix('_x')
    )
    
    df_test2.apply(lambda x: (x - pl.mean(x))/x)
    
    1 回复  |  直到 3 年前
        1
  •  2
  •   jqurious FObersteiner    3 年前

    您不需要使用 .apply 要在Polars中执行此操作,可以直接使用以下表达式:

    df.with_columns((pl.all() - pl.all().mean()).suffix('_x'))
    
    shape: (3, 4)
    ┌─────┬─────┬──────┬──────┐
    │ a   ┆ b   ┆ a_x  ┆ b_x  │
    │ --- ┆ --- ┆ ---  ┆ ---  │
    │ i64 ┆ i64 ┆ f64  ┆ f64  │
    ╞═════╪═════╪══════╪══════╡
    │ 1   ┆ 4   ┆ -3.0 ┆ -2.0 │
    │ 8   ┆ 5   ┆ 4.0  ┆ -1.0 │
    │ 3   ┆ 9   ┆ -1.0 ┆ 3.0  │
    └─────┴─────┴──────┴──────┘
    

    强烈建议使用apply,因为您将有效地运行python for循环。这将非常缓慢。只要可能,您应该强烈倾向于使用本机表达式API以获得最佳性能。