【问题标题】:Why doesn't the pandas apply method have an axis=None option to apply a function to the whole dataframe?为什么 pandas apply 方法没有一个 axis=None 选项来将函数应用于整个数据框?
【发布时间】:2018-04-26 12:57:30
【问题描述】:

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

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

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

有一个技巧可以做到这一点。

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

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

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

我是否错过了 API 中的某个方法,或者是否有更简单的方法来实现这一点?

【问题讨论】:

  • 查看 applymap 以将函数应用于数据框的每个单元格。
  • @ScottBoston 这不是我真正想要的,有点相反。我希望 lambda 中的 x 成为数据框,而不是它的组成部分。我会尽量让我的问题更清楚。

标签: python pandas dataframe


【解决方案1】:

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

pandas.DataFrame.pipe

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多