如果我只是传递一个类似下面的函数,则DataFrame.aggregate()和DataFrame.apply()函数之间的返回值的(类型)是否有任何区别
func=lambda x: x**2
因为返回值看起来几乎一样。并且文档仅告诉:
最佳答案
agg有两种版本(aggregate的缩写)和apply:第一个版本在groupby对象上定义,第二个版本在DataFrames上定义。
如果考虑groupby.agg
和groupby.apply
,则主要区别在于应用是灵活的(docs):
例如,请参见Python Pandas : How to return grouped lists in a column as a dict,以了解如何自动更改返回类型。
另一方面,groupby.agg
非常适合应用cython优化功能(即能够非常快速地计算'sum'
,'mean'
和'std'
等)。它还允许在不同的列上计算多个(不同的)函数。例如,
df.groupby('some_column').agg({'first_column': ['mean', 'std'],
'second_column': ['sum', 'sem']}
在第一列上计算平均值和标准偏差,在第二列上计算平均值的总和和标准误。有关更多示例,请参见dplyr summarize equivalent in pandas。
这些差异也在What is the difference between pandas agg and apply function?中进行了总结,但其中一个重点在于
groupby.agg
和groupby.apply
之间的差异。DataFrame.agg
在0.20版中是新的。早些时候,我们无法将多个不同的功能应用于不同的列,因为只有groupby对象才有可能。现在,您可以通过在DataFrame的列上计算多个不同的函数来对其进行汇总。来自Is there a pandas equivalent of dplyr::summarise?的示例: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
DataFrame.apply
是不可能的。它可以逐列或逐行执行,并在该列/行上执行相同的功能。对于像lambda x: x**2
这样的单个函数,它们产生相同的结果,但它们的预期用途却大不相同。关于python - apply()和aggregate()函数之间的 Pandas 区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44864655/