在熊猫管道中,给定数据框df
,按行创建新列的最佳方法是:
(df
. (...)
.assign(new_col = lambda df_: df_.apply(lambda row: my_function(row), axis=1)
)
分配需要一个pd.Series
,它本身是通过apply
逐行构建的。
我觉得这个策略太冗长了(在一行代码中有两个lambda)。有没有更简单和/或更有效的方法来达到相同的结果?
我在考虑类似于以下内容的语法:
.assign(new_col = lambda row: my_function(row), axis=1)
谢谢。
答案 0 :(得分:0)
如您所发现,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))