使用apply方法时,Pandas会移除lambda表达式。

4

在pandas管道中,我知道的最佳方法是按行创建一个新列,假设有一个数据框 df,则可以像下面这样:

```python df['new_column'] = df.apply(lambda row: some_function(row), axis=1) ```
(df
 . (...)
 .assign(new_col = lambda df_: df_.apply(lambda row: my_function(row), axis=1)
)

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

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

谢谢。

两个lambda可能是多余的。请展示my_function - Parfait
.assign(new_col = lambda df_: df_.apply(my_function, axis=1)) 是解决这个问题的方案。 - Paul-Darius
1个回答

0

正如您所发现的,pd.DataFrame.apply可以接受函数。将lambda row: my_function(row)应用于每一行是一种混淆的方法,因为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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接