transform 函数 agg 函数和apply函数的用法辨析


transform 函数 agg 函数和apply函数的用法辨析

学完pandas的基础操作后,对于group by + agg函数,和group by + tranform / apply函数的用法仍然不是很熟悉,并且apply函数和agg函数的用法似乎很类似,但并不清楚其中的区别,因此在网上收集了一些关于这两个函数的用法相关资料,帮助自己更好的理解和应用。

1、group by + agg函数

首先导入pandas包,导入数据iris;

# 用agg函数做一些分类聚合,agg是将一个函数应用在一个数列上,返回一个标量的值

# 对species分组,对两个特征做统计,用的是不同的函数

# 在特定轴(列)上应用一或多个操作(函数)

2、group by+ apply函数

# 用apply函数做分组统计,apply是将一个数据分拆-应用-汇总,它会将当前分组后的数据一起传入,可以返回多维数据

# 在不同分组上应用‘func’函数,然后将结果组合起来。其中‘func’函数必须将dataframe作为它的第一个参数

3、group by + transform函数

transform作用于数据框自身,并且返回变换后的值。返回的对象和原对象拥有相同数目的行,但可以扩展列。注意返回的对象不是就地修改了原对象,而是创建了一个新对象。也就是说原对象没变。transform运行的函数生成了一个标量值,而这个标量值在组内被广播了。

# 调用函数在每个分组上产生一个与原df相同索引的DataFrame,返回与原来对象拥有相同索引且已填充了转换后的值的DataFrame。

# 返回的值要么是与输入子DataFrame拥有相同形状的DataFrame,要么是可以广播成为原来输入子DataFrame形状大小的标量值。

附:关于apply函数和agg函数用法的回答——来自 stack overflow

某同学问:I can't figure out the difference between Pandas .aggregate and .apply functions.

回答:

1、apply applies the function to each group (your Species). Your function returns 1, so you end up with 1 value for each of 3 groups.

2、agg aggregates each column (feature) for each group, so you end up with one value per column per group.

3、agg() gives the flexibility of applying multiple functions at once, or pass a list of function to each column.Also, applying different functions at once to different columns of dataframe.That means you have pretty much control over each column with each operation.

翻译过来即为:

1、apply函数是把某功能应用到每一个分组里,你自定义的功能返回什么,apply函数就会将这个结果匹配给你每一个分组

2、agg函数会将每一个特征(也就是你表格中的每列)都匹配到你的group里,所以最终的返回的结果就是一行数据就匹配一个分组

3、agg()函数具有很高的灵活性,它可以一次性将多个功能(或者直接传递一个功能列表)到每一列数据,同时也可应用到数据框的每个不同的列。这意味着我们可以对数据列有更好的掌控性

So, .agg() could be really handy at handling the DataFrameGroupBy objects, as compared to .apply(). But, if you are handling only pure dataframe objects and not DataFrameGroupBy objects, then apply() can be very useful, as apply() can apply a function along any axis of the dataframe.(总结:如果是指处理纯数据模式的数据框时,不需要做分组,那么apply函数会很好用,apply函数可以沿着行或者列来应用某些功能,非常灵活)

三个方法中,apply是最灵活的,但是对于分组数据的聚合,用agg是最方便的,对于分组转换和展开,transform是最方便的,各有所长。(来自网络)

此外,apply 可以返回标量、Series、dataframe——取决于之前用什么object调用了apply 方法;而 transform 只能返回一个类似于数组的序列,例如一维的 Series、array、list,并且一定要和原始组有同样的长度,否则会引发错误。transform一次只能计算一列。

以上行文如有错误歧义之处,请各位同学指出,避免误导他人,谢谢大家!

你可能感兴趣的:(transform 函数 agg 函数和apply函数的用法辨析)