python - 熊猫在使用 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)
谢谢。
解决方案
正如您所发现的,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))
推荐阅读
- javascript - 无法使背景图像响应
- xml - Android Studio 应用程序未读取 pdf,活动打开为空
- python - python:如何比较 doc A 和 doc B,如果找到与 doc B 匹配的字符串,如何打印整行?
- flutter - 重新访问子页面时出现颤振错误
- c# - Serilog 请求日志记录在事件日志中结束
- python - 更改 x 刻度的字体?
- drupal - Drupal 批处理在 preventDefault 上被 jquery 对话框破坏
- powershell - Powershell 数组、函数和参考
- c++ - 使用指针的 C++ 链表 - 初学者问题
- javascript - Blazor - 加载和渲染 DOM 后应用 JS 的正确方法