apply、aggregate、transform、map傻傻搞不清楚?看这篇就对了
groupby对象的函数
----- apply
在不同分组上应用‘func’函数,然后将结果组合起来。
----- agg/aggregate
聚合(agg/aggregate)在特定轴(列)上应用一或多个操作(函数)
----- transform
调用函数在每个分组上产生一个与原df相同索引的DataFrame,整体返回与原来对象拥有相同索引且
已填充了转换后的值的DataFrame
Series对象的函数
----- map
使用输入的对应关系映射Series的值,对应关系(arg)可以是dict, Series, 或function
----- apply
在Series的值上调用函数。func既可以是Numpy的一元通用函数(ufunc),也可以是只用于单个值
的python函数。
DataFrame对象的函数
—— apply
在DataFrame的行或列上应用函数
groupby对象的函数
apply
groupby对象的实例方法
在不同分组上应用‘func’函数,然后将结果组合起来。其中‘func’函数必须将dataframe作为它的第一个参数,返回值可以为dataframe、series或scalar
![4bdc552c303f7c9d76f304f87c32581d.png](https://i-blog.csdnimg.cn/blog_migrate/9a8f645f3c794131c116f9a953f5118f.jpeg)
![53d2da5c50d9da20962fd0167289e237.png](https://i-blog.csdnimg.cn/blog_migrate/b9847f024e91ea59bcbc53c703be96dd.jpeg)
agg/aggregate
groupby对象的实例方法
聚合(agg/aggregate)在特定轴(列)上应用一或多个操作(函数)
‘func’可以为:
- string function name.
- function.
- list of functions.
- dict of column names -> functions (or list of functions).
![77a9f2bf043398f75a6f77c1447924a7.png](https://i-blog.csdnimg.cn/blog_migrate/9945cbad59729bdb239a0c5125aa7d1c.jpeg)
![2c9d1bcf418847e374843305dafe90ff.png](https://i-blog.csdnimg.cn/blog_migrate/131ec94eff1368d201abdc0b9c576318.jpeg)
transform
groupby对象的实例方法
调用函数在每个分组上产生一个与原df相同索引的DataFrame,返回与原来对象拥有相同索引且已填充了转换后的值的DataFrame。f返回的值要么是与输入子DataFrame拥有相同形状的DataFrame,要么是可以广播成为原来输入子DataFrame形状大小的标量值。
![8631a9204361f519538e92cfd4d5a1f7.png](https://i-blog.csdnimg.cn/blog_migrate/7f2bcc75884ac2a0313b5a33ff125aaa.jpeg)
![73b03058ad5d30d445ae70b76907b3a9.png](https://i-blog.csdnimg.cn/blog_migrate/ddc743c269308c1bfc8cc5ff16403698.jpeg)
Series对象的函数
map
使用输入的对应关系映射Series的值,对应关系(arg)可以是dict, Series, 或function. 这也是pandas中使用频率最高的一个函数。
![e1a60adad459cb8a6d549301b239cb65.png](https://i-blog.csdnimg.cn/blog_migrate/1b2b88abc96bc288e47363de0ed34918.jpeg)
![b252e0710014f277279a994d9df31a6c.png](https://i-blog.csdnimg.cn/blog_migrate/f9d686fd5da01d69e686c49a092c4966.jpeg)
最常用的是匿名函数lambda:
![88444311f16505dd304fd2be9fb9e3c5.png](https://i-blog.csdnimg.cn/blog_migrate/3173ddb6f986116d9929f92b84c6ea0e.jpeg)
map()函数还可以应用于索引,需要注意的是,如果函数返回的元组包含多个元素,则将返回MultiIndex
![8ecbc81183ed62b3edf3b56d17d92bd9.png](https://i-blog.csdnimg.cn/blog_migrate/137823467d8426d374409b59e6467b72.jpeg)
除了运算之外,我们还经常使用map和lambda进行数字格式转化
小数转化为百分数
![308c392768f1ac65c9ead1ac65aa13d6.png](https://i-blog.csdnimg.cn/blog_migrate/fbce921fcfe4eb4603dbc487fdf6e8c2.jpeg)
要注意,转换之后, 原本的float型变成了str型,不能再进行计算。
指定小数位数
使用round()函数即可,最后一位会四舍五入
![54efc7b02d3a648f7f12e7f18760c80d.png](https://i-blog.csdnimg.cn/blog_migrate/4cb5598d9632502fec69a96e77744d6c.jpeg)
条件判断
很多人不知道其实lambda里面还可以加if else判断:
假设我们有这样一个DataFrame
![1a92c4cdcb00f33a311cd48f2d5abf8f.png](https://i-blog.csdnimg.cn/blog_migrate/bd028f819c9d50d132a4df8234ffa6f0.jpeg)
timestamp一列中既有unix时间戳(int)又有datetime字符串(str),此时如果要把这一列的时间都转成datetime对象的形式该怎么做?
![22b445cdcf503533d6ea328abf46a63d.png](https://i-blog.csdnimg.cn/blog_migrate/fd8cbd3680b6efd7b7bf0cc418363260.jpeg)
需要注意的是,不能在lambda表达式里面单独使用 if
apply
在Series的值上调用函数。func既可以是Numpy的一元通用函数(ufunc),也可以是只用于单个值的python函数。
![cfdb9582d05f089536c51d06a74b8aa3.png](https://i-blog.csdnimg.cn/blog_migrate/71016adfe7cf51f634797b05a15901ab.jpeg)
![80f1511eb7cfae11c597a083a1ccb446.png](https://i-blog.csdnimg.cn/blog_migrate/a406f833bc2bda13de08e8f48aab7bf8.jpeg)
DataFrame对象的函数
apply
在DataFrame的行或列上应用函数
Apply a function along an axis of the DataFrame.
Objects passed to the function are Series objects whose index is
either the DataFrame's index (``axis=0``) or the DataFrame's columns
(``axis=1``). By default (``result_type=None``), the final return type
is inferred from the return type of the applied function. Otherwise,
it depends on the `result_type` argument.
apply(func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **kwds)
重点参数
func : function
Function to apply to each column or row.
axis : {0 or 'index', 1 or 'columns'}, default 0
Axis along which the function is applied:
* 0 or 'index': apply function to each column.
* 1 or 'columns': apply function to each row.
![757ebd4044036e60285693ffa4053c24.png](https://i-blog.csdnimg.cn/blog_migrate/4ab19d90536db164a0c042b5ebf7bb20.jpeg)
另一个例子:
![f353e133cc8bbe0d86e4577a70727b74.png](https://i-blog.csdnimg.cn/blog_migrate/02d8e69fcbe9824312978e7e1f636953.jpeg)