首页 > 解决方案 > 熊猫在使用 apply 方法时删除 lambdas

问题描述

在 pandas 管道中,我知道在给定数据框的情况下按行创建新列的最佳方法df是:

(df
 . (...)
 .assign(new_col = lambda df_: df_.apply(lambda row: my_function(row), axis=1)
)

assign 需要一个pd.Series,它本身是通过 逐行构建的apply
我觉得这个策略太冗长了(一行代码中有两个 lambda)。是否有更简单和/或更有效的方法来达到相同的结果?我正在考虑类似于以下的语法:

 .assign(new_col = lambda row: my_function(row), axis=1)

谢谢。

标签: pythonpandasdataframe

解决方案


正如您所发现的,pd.DataFrame.apply接受一个函数。应用lambda row: my_function(row)到每一行是应用到每一行的一种混淆方式,my_function就像lambda一个匿名函数一样。因此,直接喂my_function

df.(...)\
  .assign(new_col=lambda df_: df_.apply(my_function, axis=1))

my_function请注意,如果使用的列未更改并且您的数据帧索引在整个先前的逻辑中保持不变,则可以简化您的逻辑:

df.(...)\
  .assign(new_col=df.apply(my_function, axis=1))

推荐阅读