您的位置: 网站首页> Pandas教程> 当前文章

pandas transform用法详解(多个案例)

老董2022-04-12172围观,138赞

  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。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    pandas transform用法详解(多个案例)文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 博主微信:a772483200