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

series变成列名 series怎么变成list_series变成列名


series变成列名 series怎么变成list_series变成列名_02


agg/aggregate

groupby对象的实例方法

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

‘func’可以为:

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


series变成列名 series怎么变成list_python groupby函数_03


series变成列名 series怎么变成list_python groupby函数_04


transform

groupby对象的实例方法

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


series变成列名 series怎么变成list_pandas apply lambda_05


series变成列名 series怎么变成list_python groupby函数_06


Series对象的函数

map

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


series变成列名 series怎么变成list_python groupby agg_07


series变成列名 series怎么变成list_series变成列名_08


最常用的是匿名函数lambda:


series变成列名 series怎么变成list_series变成列名_09


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


series变成列名 series怎么变成list_python groupby函数_10


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

小数转化为百分数


series变成列名 series怎么变成list_python groupby函数_11


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

指定小数位数

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


series变成列名 series怎么变成list_python apply函数_12


条件判断

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

假设我们有这样一个DataFrame


series变成列名 series怎么变成list_python groupby agg_13


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


series变成列名 series怎么变成list_python apply函数_14


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

apply

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


series变成列名 series怎么变成list_python apply函数_15


series变成列名 series怎么变成list_pandas apply lambda_16


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.


series变成列名 series怎么变成list_python groupby agg_17


另一个例子:


series变成列名 series怎么变成list_python apply函数_18