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动刷新抢12306火车票的代码(附源码)
Jan 24 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
python基于Selenium的web自动化框架
Jul 14 Python
Python实现密码薄文件读写操作
Dec 16 Python
基于python读取.mat文件并取出信息
Dec 16 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
最新pycharm安装教程
Nov 18 Python
Python基于unittest实现测试用例执行
Nov 25 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/20 PHP
php 生成随机验证码图片代码
2010/02/08 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
js实现继承的5种方式
2015/12/01 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python实现购物车功能的方法分析
2017/11/10 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
Volcom法国官网:美国冲浪滑板品牌
2017/05/25 全球购物
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
中班中秋节活动反思
2014/02/18 职场文书
社区春季防火方案
2014/06/02 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
社会实践单位意见
2015/06/05 职场文书
安全生产学习心得体会
2016/01/18 职场文书
mysql部分操作
2021/04/05 MySQL
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL