如果我只是传递一个函数,那么DataFrame.aggregate()和DataFrame.apply()函数之间的返回值的(类型)有什么不同吗?
func=lambda x: x**2
Run Code Online (Sandbox Code Playgroud)
因为返回值似乎非常相似.文档只告诉:
apply() - > applied:Series或DataFrame
aggregate() - > aggregated:DataFrame
有两个版本的agg(聚合的简称)和apply:第一个是在groupby对象上定义的,第二个是在DataFrames上定义的.
如果你考虑groupby.agg 和groupby.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.agg和groupby.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它们产生相同的结果,但它们的预期用途是非常不同的.