pandas apply()和aggregate()函数之间的区别

2Ob*_*Obe 3 python pandas

如果我只是传递一个函数,那么DataFrame.aggregate()和DataFrame.apply()函数之间的返回值的(类型)有什么不同吗?

func=lambda x: x**2
Run Code Online (Sandbox Code Playgroud)

因为返回值似乎非常相似.文档只告诉:

apply() - > applied:Series或DataFrame

aggregate() - > aggregated:DataFrame

ayh*_*han 8

有两个版本的agg(聚合的简称)和apply:第一个是在groupby对象上定义的,第二个是在DataFrames上定义的.

如果你考虑groupby.agggroupby.apply,主要区别在于申请是灵活的(docs):

对分组数据的某些操作可能不适合聚合或转换类别.或者,您可能只是希望GroupBy推断如何组合结果.对于这些,使用apply函数,它可以在许多标准用例中替换聚合和转换.

注意:apply可以充当reducer,transformer或filter函数,具体取决于传递给应用的内容.因此,取决于所采用的路径,以及您正在分组的内容.因此,分组的列可以包括在输出中以及设置索引.

请参阅Python Pandas:如何将列中的分组列表作为dict返回,以便举例说明返回类型是如何自动更改的.

groupby.agg,在另一方面,是用于将用Cython优化的函数(即,能够计算非常好'sum','mean','std'等非常快).它还允许计算不同列上的多个(不同)函数.例如,

df.groupby('some_column').agg({'first_column': ['mean', 'std'],
                               'second_column': ['sum', 'sem']}
Run Code Online (Sandbox Code Playgroud)

计算第一列的均值和标准差以及第二列的均值和和标准误差.有关更多示例,请参阅dplyr汇总pandas中的等效项.

这些差异也总结在pandas agg和apply函数之间有什么区别?但是,一个专注于之间的差异groupby.agggroupby.apply.

DataFrame.agg是0.20版本的新功能.之前,我们无法将多个不同的函数应用于不同的列,因为它只能用于groupby对象.现在,您可以通过计算其列上的多个不同函数来汇总DataFrame.示例来自pdas是否相当于dplyr :: summarize?:

iris.agg({'sepal_width': 'min', 'petal_width': 'max'})

petal_width    2.5
sepal_width    2.0
dtype: float64

iris.agg({'sepal_width': ['min', 'median'], 'sepal_length': ['min', 'mean']})

        sepal_length  sepal_width
mean        5.843333          NaN
median           NaN          3.0
min         4.300000          2.0
Run Code Online (Sandbox Code Playgroud)

这是不可能的DataFrame.apply.它可以逐列或逐行进行,并在该列/行上执行相同的功能.对于单个功能,lambda x: x**2它们产生相同的结果,但它们的预期用途是非常不同的.