如果我只是通过类似下面的函数,DataFrame.aggregate()和DataFrame.apply()函数之间的返回值的(类型)是否有任何区别
func=lambda x: x**2
因为返回值看起来几乎一样。并且文档仅告诉:
apply()-> apply:Series或DataFrame
聚合()->聚合:DataFrame
agg有两种版本(aggregate的缩写)和适用:第一个版本在groupby对象上定义,第二个版本在DataFrames上定义。
如果您考虑groupby.agg
和groupby.apply
,则主要区别在于申请是灵活的(docs):
对分组数据进行的某些操作可能不适合聚合或转换类别。或者,您可能只是希望GroupBy推断如何合并结果。对于这些,请使用apply函数,在许多标准用例中,apply函数可用于聚合和转换。
注意:apply可以充当reducer,transformer或filter函数,具体取决于传递给apply的内容。因此,取决于采用的路径以及您要分组的对象。因此,分组的列可以被包括在输出中并且设置索引。
例如,有关如何自动更改返回类型的说明,请参见Python
Pandas:如何将列中的分组列表作为dict
返回。
groupby.agg
,在另一方面,是用于将用Cython优化的函数(即,能够计算非常好'sum'
,'mean'
,'std'
等非常快)。它还允许在不同的列上计算多个(不同)函数。例如,
df.groupby('some_column').agg({'first_column': ['mean', 'std'],
'second_column': ['sum', 'sem']}
在第一列上计算平均值和标准偏差,在第二列上计算平均值的和和标准误。有关更多示例,请参见dplyr总结熊猫等效项。
这些差异也总结了什么是熊猫AGG和应用功能之间的区别?但是,一个专注于之间的差异groupby.agg
和groupby.apply
。
DataFrame.agg
是0.20版的新功能。之前,我们无法将多个不同的功能应用于不同的列,因为只有groupby对象才可以使用。现在,您可以通过在DataFrame的列上计算多个不同的函数来汇总它。来自的示例是否有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
它们产生相同的结果,但其预期用途却大不相同。
问题内容: Numpy似乎在和类型之间进行了区分。例如我可以做:: 其中dtype(’S’)和dtype(’O’)分别对应于和。 但是熊猫似乎就缺少了区分,并要挟到。:: 强制类型也无济于事。:: 此行为有任何解释吗? 问题答案: Numpy的字符串dtypes不是python字符串。 因此,故意使用本机python字符串,这需要对象dtype。 首先,让我演示一下numpy的字符串与众不同的含义
和? 到目前为止,这是我发现的,请评论我的理解是否完整和准确: > 只能使用列(加上行索引),并且它在语义上适合于数据库风格的操作。可以与任一轴一起使用,只使用索引,并且提供了添加一个分级索引。 顺便说一下,这允许以下冗余:两者都可以使用行索引组合两个数据帧。 只提供了 (Pandas擅长处理数据分析中非常广泛的用例。探索文档以找出执行特定任务的最佳方式可能有点令人生畏。)
问题内容: 这两个命令之间在时间执行方面有区别: 谢谢您的帮助 问题答案: 我认为您不会注意到这种差异。 这是两个函数的源代码: 和 注意:我故意切断了文档字符串…
本文向大家介绍SCALAR和COLUMN函数之间的区别,包括了SCALAR和COLUMN函数之间的区别的使用技巧和注意事项,需要的朋友参考一下 DB2 SCALAR函数采用单个列值并返回单个结果。COLUMN函数从DB2表的多行中获取列值,并返回单个结果。对于SCALAR函数,仅涉及一行。 SCALAR 函数 描述 LENGTH 给出列值的长度 REPLACE 用于用另一个字符串替换一个字符串 C
问题内容: 我有一个熊猫DataFrame ,。它包含一列“大小”,以字节为单位表示大小。我已经使用以下代码计算了KB,MB和GB: 我已经运行了超过120,000行,并且根据%timeit,每列花费的时间约为2.97秒* 3 =〜9秒。 无论如何,我可以使它更快吗?例如,我是否可以代替一次套用并运行3次而不是一次返回一列,而是可以一次通过返回所有三列以将其插入回原始数据帧吗? 我发现的其他问题都
问题内容: 你能否通过基本示例告诉我何时使用这些矢量化方法? 我看到这是一种方法,而其余都是方法。我糊涂了约和,虽然方法。为什么我们有两种将函数应用于DataFrame的方法?同样,简单的例子可以很好地说明用法! 问题答案: 另一个常见的操作是将一维数组上的函数应用于每一列或每一行。DataFrame的apply方法正是这样做的: 许多最常见的数组统计信息(例如sum和mean)都是DataFra