agg pandas 函数_【S01E12】pandas之函数应用:map、apply、agg和transform

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

53d2da5c50d9da20962fd0167289e237.png

agg/aggregate

groupby对象的实例方法

聚合(agg/aggregate)在特定轴(列)上应用一或多个操作(函数)

‘func’可以为:

- string function name.
- function.
- list of functions.
- dict of column names -> functions (or list of functions).

77a9f2bf043398f75a6f77c1447924a7.png

2c9d1bcf418847e374843305dafe90ff.png

transform

groupby对象的实例方法

调用函数在每个分组上产生一个与原df相同索引的DataFrame,返回与原来对象拥有相同索引且已填充了转换后的值的DataFrame。f返回的值要么是与输入子DataFrame拥有相同形状的DataFrame,要么是可以广播成为原来输入子DataFrame形状大小的标量值。

8631a9204361f519538e92cfd4d5a1f7.png

73b03058ad5d30d445ae70b76907b3a9.png

Series对象的函数

map

使用输入的对应关系映射Series的值,对应关系(arg)可以是dict, Series, 或function. 这也是pandas中使用频率最高的一个函数。

e1a60adad459cb8a6d549301b239cb65.png

b252e0710014f277279a994d9df31a6c.png

最常用的是匿名函数lambda:

88444311f16505dd304fd2be9fb9e3c5.png

map()函数还可以应用于索引,需要注意的是,如果函数返回的元组包含多个元素,则将返回MultiIndex

8ecbc81183ed62b3edf3b56d17d92bd9.png

除了运算之外,我们还经常使用map和lambda进行数字格式转化

小数转化为百分数

308c392768f1ac65c9ead1ac65aa13d6.png

要注意,转换之后, 原本的float型变成了str型,不能再进行计算。

指定小数位数

使用round()函数即可,最后一位会四舍五入

54efc7b02d3a648f7f12e7f18760c80d.png

条件判断

很多人不知道其实lambda里面还可以加if else判断:

假设我们有这样一个DataFrame

1a92c4cdcb00f33a311cd48f2d5abf8f.png

timestamp一列中既有unix时间戳(int)又有datetime字符串(str),此时如果要把这一列的时间都转成datetime对象的形式该怎么做?

22b445cdcf503533d6ea328abf46a63d.png

需要注意的是,不能在lambda表达式里面单独使用 if

apply

在Series的值上调用函数。func既可以是Numpy的一元通用函数(ufunc),也可以是只用于单个值的python函数。

cfdb9582d05f089536c51d06a74b8aa3.png

80f1511eb7cfae11c597a083a1ccb446.png

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

另一个例子:

f353e133cc8bbe0d86e4577a70727b74.png
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值