pandas 的apply() 函数

pandas的apply函数是自动根据function遍历每一个数据,然后返回一个数据结构为Series的结果

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

参数解释:

1.func:就是函数,不管是自定义的函数,还是匿名函数lambda

2.axis:0是类,1是行,默认axis=0

例子:

import numpy as np
import pandas as pd 

a=np.arange(1,13).reshape(3,4)
df=pd.DataFrame(a,columns=list('abcd'))

df.apply(lambda x:x.sum())
df.apply(lambda x:x.sum(),axis=1)

#应用于Series数据
df['a'].apply(lambda x:x*x)

 如果是fun的参数是一个字表,也就是groupby之后的字表,这时我们这样使用

zg_tmp.groupby('label').apply(lambda x:pc.cols_report(x))
#或者是
zg_tmp.groupby('label').apply(pc.cols_report)

apply的使用总共基本用于三处,1是你要对每条记录进行遍历去函数计算出一个值,2是你要对某一列进行操作,3是你groupby后要对每个group后的字表df 

df.apply(lambda x:func(x,args**),axis=1)
df.apply(lambda x:func(x,args**),axis=0)
df.groupby([column1]).apply(lambda x:func(x,args**))

df.groupby(“count”).get_group(1)获得某一组的df
df.groupby(“count”).groups获得所有组的两端索引的列表,以索引表示
df.groupby(“count”).indices获得所有组的两端索引的列表,以列表表示

如果函数中有多个参数,我们可以使用args=(),括号里面就是除第一个参数外,其余的参数

 

=======================================2021.01.25补充======================================

那么apply应用在Pandas中,其核心功能其实可以概括为一句话:

apply:我本身不处理数据,我们只是数据的搬运工。

apply自身是不带有任何数据处理功能的,但可以用作是对其他数据处理方法的调度器,至于调度什么又为谁而调度呢?这是理解apply的两个核心环节:

  • 调度什么?调度的是apply函数接收的参数,即apply接收一个数据处理函数为主要参数,并将其应用到相应的数据上。所以调度什么取决于接收了什么样的数据处理函数;

  • 为谁调度?也就是apply接收的数据处理函数,其作用对象是谁?或者说数据处理的粒度是什么?答案是数据处理的粒度包括了点线面三个层面:即可以是单个元素(标量,scalar),也可以是一行或一列(series),还可以是一个dataframe

 

理解apply核心在于明确两个环节:调度函数和作用对象。调度函数就是apply接收的参数,既可以是Python内置的函数,也支持自定义函数,只要符合指定的作用对象(即是标量还是series亦或一个dataframe)即可。而作用对象则取决于调用apply的对象类型,具体来说:

  • 一个Series对象调用apply时,数据处理函数作用于该Series的每个元素上,即作用对象是一个标量,实现从一个Series转换到另一个Series;

  • 一个DataFrame对象调用apply时,数据处理函数作用于该DataFrame的每一行或者每一列上,即作用对象是一个Series,实现从一个DataFrame转换到一个Series上;

  • 一个DataFrame对象经过groupby分组后调用apply时,数据处理函数作用于groupby后的每个子dataframe上,即作用对象还是一个DataFrame(行是每个分组对应的行;列字段少了groupby的相应列),实现从一个DataFrame转换到一个Series上

 

 

 

posted on 2020-07-16 11:08  小小喽啰  阅读(4740)  评论(0编辑  收藏  举报