惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
MyScale Blog
MyScale Blog
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
量子位
博客园 - 司徒正美
V
V2EX
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Vercel News
Vercel News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
N
Netflix TechBlog - Medium
L
LangChain Blog
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
A
About on SuperTechFans
Microsoft Azure Blog
Microsoft Azure Blog

老董笔记

尚硅谷机构在哪?尚硅谷培训怎么样?靠谱吗-互联网IT百科 韩顺平介绍,传智讲师,开办泰牛,入尚硅谷等一系列-互联网IT百科 pandas多重索引标准样式(写入excel有空行)-互联网IT百科 cannot join with no overlapping index names-互联网IT百科 pandas多列变多行(即宽表变长表)melt和stack函数-互联网IT百科 pandas多行转多列(长表变宽表)pivot和unstack-互联网IT百科 Index contains duplicate entries, cannot reshape完美解决-互联网IT百科 single positional indexer is out-of-bounds-互联网IT百科 Can only compare identically-labeled Series objects-互联网IT百科 python四舍五入精确实现-互联网IT百科 pandas的groupby使用apply分组排序-互联网IT百科 index 0 is out of bounds for axis 0 with size 0-互联网IT百科 pandas分组过滤filter函数-互联网IT百科 联想Win10系统如何禁用触摸屏关闭触摸-互联网IT百科 groupby分组计算transform转换返回相同长度序列-互联网IT百科 brooks seo教程python教程,brooks seo教程网盘,布鲁seo资源-互联网IT百科 电脑右键文件夹一直转圈电卡死怎么回事-互联网IT百科 施琪嘉的心理成长课(荐)-互联网IT百科 百度SEO公司_SEO推广公司哪家好_SEO外包服务如何选-老董笔记 groupby后agg同1列用多个聚合函数、不同列用不同函数、自定义函数-互联网IT百科 pandas的groupby单列多列分组聚合运算-互联网IT百科 DataFrameGroupBy对象及分组个数、分组大小、组名索引、组数据详解-互联网IT百科 pandas中groupby之Grouper and axis must be same length-互联网IT百科 pandas中groupby的分组原理-互联网IT百科 pandas的groupby的使用详解大全-互联网IT百科 openpyxl单元格自动换行强制换行Alignment(wrapText=True)-互联网IT百科 python教程全套(可就业)-互联网IT百科 联想win10系统CPU显示100%,电脑呼呼响怎么回事-互联网IT百科 如何自制CPU,CPU原理是怎么样的?-互联网IT百科 多款视频制作工具(免费)分享及素材推荐-互联网IT百科
pandas transform用法详解(多个案例)-互联网IT百科
2022-04-12 · via 老董笔记

  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学习会