您的位置: 网站首页> Pandas教程> 当前文章
pandas transform用法详解(多个案例)
老董-我爱我家房产SEO2022-04-12186围观,124赞
pandas的transform函数的特点是不会压缩索引,最终的结果和原数据的索引个数保持一致。
transform函数可以被很多对象调用,如Series对象、DataFrame对象、DataFrameGroupBy对象、SeriesGroupBy对象,日常使用中DataFrameGroupBy对象和SeriesGroupBy对象应用transform最多。因为transform函数经常和分组运算结合在一起。
1、Series对象调用transform()
Series.transform(func,axis=0,*args,**kwargs)。Series对象调用transform()函数时,transform()内func参数(函数名)接收的参数是Series的每个元素,我们可以在func内对每个元素做一些处理。比如,给如下df添加1个新列:
但是要注意有些pandas自带的函数不能直接用,比如sum、count,会报错ValueError: Function did not transform。这一点和SeriesGroupBy对象有差别。处理Series对象的每个元素,apply函数更常用,而不是transform。
# -*- coding:UTF-8 -*- df = pd.read_excel('11.xlsx') print(df) df['ershou_new'] = df['ershou'].transform(add) print('------------------') df['ershou_new'] = df['ershou'].transform('sum') print(df)
city quyu ershou zu 0 bj haidian 180 100 1 bj haidian 181 101 2 bj chaoyang 182 102 3 bj chaoyang 183 103 ------------------ city quyu ershou zu ershou_new 0 bj haidian 180 100 280 1 bj haidian 181 101 281 2 bj chaoyang 182 102 282 3 bj chaoyang 183 103 283 raise ValueError("Function did not transform") ValueError: Function did not transform
2、DataFrame对象调用transform()
DataFrame.transform(func,axis=0,*args,**kwargs)
DataFrame对象调用transform()函数时,transform()内func参数(函数名)接收的参数是DataFrame的每1列或者行(axis=0代表列)。我们可以在func内对每个列或者行做一些处理。处理DataFrame对象的每一行(或者列),apply函数更常用,而不是transform。
# -*- coding:UTF-8 -*- import pandas as pd df = pd.DataFrame({'A': range(3), 'B': range(1, 4)}) print(df) print('-----------') df_res = df.transform(lambda x:x+1) print(df_res)
A B 0 0 1 1 1 2 2 2 3 ----------- A B 0 1 2 1 2 3 2 3 4
# -*- coding:UTF-8 -*- import pandas as pd df = pd.DataFrame({'A': range(3), 'B': range(1, 4)}) def test(s): return 100 df_res = df.transform(test) # 报错,不能调用,很奇葩 print(df_res)
raise ValueError("Function did not transform") ValueError: Function did not transform
3、SeriesGroupBy对象与DataFrameGroupBy对象调用transform()
对Series应用groupby或者从DataFrameGroupBy对象选取1列(更常用)就是SeriesGroupBy对象,SeriesGroupBy对象应用transform经常被用来新增一列。
SeriesGroupBy.transform(func,*args,engine=None,engine_kwargs=None,**kwargs)。
SeriesGroupBy对象调用transform()函数时,transform()内func函数接收的参数是SeriesGroupBy每个子组的1列。我们可以在func内对每个子组进行处理。
DataFrameGroupBy.transform(func,*args,engine=None,engine_kwargs=None,**kwargs)。
DataFrameGroupBy对象调用transform()函数时,transform()内func函数接收的参数是DataFrameGroupBy每个子df。我们可以在func内对每个子df进行处理。
下述是1个的列子,关于这块的详细操作可点击查看>>groupby分组应用transform
# -*- coding:UTF-8 -*- import pandas as pd df = pd.read_excel('11.xlsx') print(df) print('==========') sgb = df.groupby('subject')['score'] print(type(sgb)) df['all'] = sgb.transform('sum') print(df)
name subject score 0 jack math 100 1 jack english 110 2 lucy math 120 3 lucy english 150 ========== <class 'pandas.core.groupby.generic.SeriesGroupBy'> name subject score all 0 jack math 100 220 1 jack english 110 260 2 lucy math 120 220 3 lucy english 150 260
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
pandas transform用法详解(多个案例)文章写得不错,值得赞赏
站点信息
- 网站程序:Laravel
- 客服微信:a772483200