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
agg/aggregate
groupby对象的实例方法
聚合(agg/aggregate)在特定轴(列)上应用一或多个操作(函数)
‘func’可以为:
- string function name.
- function.
- list of functions.
- dict of column names -> functions (or list of functions).
transform
groupby对象的实例方法
调用函数在每个分组上产生一个与原df相同索引的DataFrame,返回与原来对象拥有相同索引且已填充了转换后的值的DataFrame。f返回的值要么是与输入子DataFrame拥有相同形状的DataFrame,要么是可以广播成为原来输入子DataFrame形状大小的标量值。
Series对象的函数
map
使用输入的对应关系映射Series的值,对应关系(arg)可以是dict, Series, 或function. 这也是pandas中使用频率最高的一个函数。
最常用的是匿名函数lambda:
map()函数还可以应用于索引,需要注意的是,如果函数返回的元组包含多个元素,则将返回MultiIndex
除了运算之外,我们还经常使用map和lambda进行数字格式转化
小数转化为百分数
要注意,转换之后, 原本的float型变成了str型,不能再进行计算。
指定小数位数
使用round()函数即可,最后一位会四舍五入
条件判断
很多人不知道其实lambda里面还可以加if else判断:
假设我们有这样一个DataFrame
timestamp一列中既有unix时间戳(int)又有datetime字符串(str),此时如果要把这一列的时间都转成datetime对象的形式该怎么做?
需要注意的是,不能在lambda表达式里面单独使用 if
apply
在Series的值上调用函数。func既可以是Numpy的一元通用函数(ufunc),也可以是只用于单个值的python函数。
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.
另一个例子: