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 相关文章推荐
简单的通用表达式求10乘阶示例
Mar 03 Python
Python中的包和模块实例
Nov 22 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
浅析Django中关于session的使用
Dec 30 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
python安装第三方库如xlrd的方法
Oct 31 Python
Matplotlib绘制混淆矩阵的实现
May 27 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
php实例分享之二维数组排序
2014/05/15 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python中的exec、eval使用实例
2014/09/23 Python
Python单元测试实例详解
2018/05/25 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
python Matplotlib模块的使用
2020/09/16 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
python在地图上画比例的实例详解
2020/11/13 Python
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
法人委托书的范本格式
2014/09/11 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
win10搭建配置ftp服务器的方法
2022/08/05 Servers