Python自定义聚合函数merge与transform区别详解


Posted in Python onMay 26, 2020

1.自定义聚合函数,结合agg使用

2. 同时使用多个聚合函数

3. 指定某一列使用某些聚合函数

4.merge与transform使用

import pandas as pd
  import numpy as np
  np.random.seed(1)
  dict_data = {
    'k1': ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'],
    'k2': ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D'],
    'data1': np.random.randint(1,10,8),
    'data2': np.random.randint(1,10,8)
  }
  df = pd.DataFrame(dict_data)
  print('df=\n',df)
  df2 = df.groupby('k1').sum()
  # df2 = df.sum()
  print("df.groupby('k1').sum()\n",df2)

  # 使用聚合函数
  def cus(df):
    return df.max()-df.min()
  # 默认列索引为列名。元组第0个元素‘Max',‘mu_cus'为自定义列名称,第一个元素为聚合函数名称
  print("使用聚合函数1\n",df.groupby('k1').agg(['sum',('Max','max'),('mu_cus',cus)]))
  # 制定某一列使用某个聚合函数, 元组不能用来重命名列名了,元组里面的函数,表示这一列将会执行的聚合函数
  print("使用聚合函数2\n",df.groupby('k1').agg({'data1':('min', 'max'),'data2':'min'}))

  df3 = df.groupby('k1').sum().add_prefix('sum_')
  print('df3=\n',df3)
  # 如果不使用add_prefix('sum_'),那么在merge时候data1余data2列名相同,会被自动重命名
  print('merge=\n',pd.merge(df,df3,on='k1')) 

  transform_df = df.groupby('k1').transform(np.sum).add_prefix('sum_')
  print(transform_df)
  df[transform_df.columns]=transform_df # transform_df.columns Index(['sum_k2', 'sum_data1', 'sum_data2'], dtype='object')
  # df[transform_df.columns.values]=transform_df #等价,# transform_df.columns.values ['sum_k2', 'sum_data1', 'sum_data2']
 print(df) 
 exit()

结果

df=
  k1 k2 data1 data2
0 a A   6   3
1 b B   9   5
2 c C   6   6
3 d D   1   3
4 a A   1   5
5 b B   2   3
6 c C   8   5
7 d D   7   8
df.groupby('k1').sum()
   data1 data2
k1       
a    7   8
b   11   8
c   14   11
d    8   11
使用聚合函数1
  data1      data2      
   sum Max mu_cus  sum Max mu_cus
k1                 
a   7  6   5   8  5   2
b   11  9   7   8  5   2
c   14  8   2  11  6   1
d   8  7   6  11  8   5
使用聚合函数2
  data1   data2
   min max  min
k1        
a   1  6   3
b   2  9   3
c   6  8   5
d   1  7   3
df3=
   sum_data1 sum_data2
k1           
a      7     8
b     11     8
c     14     11
d      8     11
merge=
  k1 k2 data1 data2 sum_data1 sum_data2
0 a A   6   3     7     8
1 a A   1   5     7     8
2 b B   9   5     11     8
3 b B   2   3     11     8
4 c C   6   6     14     11
5 c C   8   5     14     11
6 d D   1   3     8     11
7 d D   7   8     8     11
 sum_k2 sum_data1 sum_data2
0   AA     7     8
1   BB    11     8
2   CC    14    11
3   DD     8    11
4   AA     7     8
5   BB    11     8
6   CC    14    11
7   DD     8    11
 k1 k2 data1 data2 sum_k2 sum_data1 sum_data2
0 a A   6   3   AA     7     8
1 b B   9   5   BB    11     8
2 c C   6   6   CC    14    11
3 d D   1   3   DD     8    11
4 a A   1   5   AA     7     8
5 b B   2   3   BB    11     8
6 c C   8   5   CC    14    11
7 d D   7   8   DD     8    11

Process finished with exit code 0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python对象的深拷贝和浅拷贝详解
Aug 25 Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
利用Python破解验证码实例详解
Dec 08 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
Django如何开发简单的查询接口详解
May 17 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
Python3监控疫情的完整代码
Feb 20 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
详解运行Python的神器Jupyter Notebook
Jun 03 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 #Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 #Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 #Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 #Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 #Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 #Python
Django+Celery实现动态配置定时任务的方法示例
May 26 #Python
You might like
php缓存技术介绍
2006/11/25 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
Python读写Excel文件的实例
2013/11/01 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
python实现经纬度采样的示例代码
2020/12/10 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题
毕业生自我推荐
2013/11/04 职场文书
会计专业的自荐信
2013/12/12 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
大学军训决心书
2015/02/05 职场文书
教师年终个人总结
2015/02/11 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL