首页 > 解决方案 > 为什么 pandas 的 apply 方法没有一个 axis=None 选项来将函数应用于整个数据框?

问题描述

pandas API(恕我直言/YMMV)似乎存在差距,因为无法链接对整个数据帧进行操作的操作(以流畅的方式)。

例如a.op1.op2.op3...

apply 方法接受一个函数和一个轴参数,并将函数相应地应用于行或列。我认为缺少的是一个轴=无,这意味着该函数适用于整个数据帧。这将允许操作,包括结构修改(例如删除行、列、重命名、索引更改等)以这种流畅的样式链接。

有一个 hack 可以做到这一点。

如果 a 是一个数据框,那么...

a.groupby(lambda _:0).apply(lambda x:...

...意味着应用的 lambda 中的 x 被连续设置为 groupby 的每个组,但只创建了一个组,因此应用于该组的函数有效地成为应用于整个数据帧的函数。然而,这有点笨拙,并且有一个缺点是有时groupby 会在索引中创建一个新级别(但有时它不会,这很难预测)。

我是否错过了 API 中的一个方法,或者是否有一种不那么笨拙的方法来实现这一点?

标签: pythonpandasdataframe

解决方案


看起来我一直都是“管道”方法,它接受一个函数并将其直接应用于 DataFrame(或 Series、GroupBy)。

pandas.DataFrame.pipe


推荐阅读