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统计文件中去重后uuid个数的方法
Jul 30 Python
Python与R语言的简要对比
Nov 14 Python
python2.6.6如何升级到python2.7.14
Apr 08 Python
Django异步任务之Celery的基本使用
Mar 23 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
python 魔法函数实例及解析
Sep 25 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
Python安装whl文件过程图解
Feb 18 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
如何用Python提取10000份log中的产品信息
Jan 14 Python
Python网络编程之ZeroMQ知识总结
Apr 25 Python
Python提取PDF指定内容并生成新文件
Jun 09 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中将网址转换为超链接的函数
2011/09/02 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
javascript读取xml
2006/11/04 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python写入CSV文件的方法
2015/07/08 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
详解Python 循环嵌套
2020/07/09 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
外语专业毕业生个人的自荐信
2013/11/19 职场文书
后勤工作职责
2013/12/22 职场文书
党员的自我评价范文
2014/01/02 职场文书
培训专员岗位职责
2014/02/26 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
Java输出Hello World完美过程解析
2021/06/13 Java/Android