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 ftp上传文件
Feb 13 Python
解析Python中的__getitem__专有方法
Jun 27 Python
django使用xlwt导出excel文件实例代码
Feb 06 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
python实现图片识别汽车功能
Nov 30 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
使用OpenCV对车道进行实时检测的实现示例代码
Jun 19 Python
Python变量及数据类型用法原理汇总
Aug 06 Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 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木马webshell扫描器代码
2012/01/25 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
jQuery实现的调整表格行tr上下顺序
2016/01/10 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
python实现归并排序算法
2018/11/22 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
PyTorch预训练的实现
2019/09/18 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
会计专业自我鉴定范文
2013/10/06 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
活动志愿者自荐信
2014/01/27 职场文书
村庄环境整治方案
2014/05/15 职场文书
科学发展观演讲稿
2014/09/11 职场文书
医德考评自我评价
2014/09/14 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python
python实现简单的三子棋游戏
2022/04/28 Python
关于的python五子棋的算法
2022/05/02 Python