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实现检测服务器是否可以ping通的2种方法
Jan 01 Python
Python编写生成验证码的脚本的教程
May 04 Python
django创建自定义模板处理器的实例详解
Aug 14 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
对django views中 request, response的常用操作详解
Jul 17 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
pygame实现五子棋游戏
Oct 29 Python
Pytorch在NLP中的简单应用详解
Jan 08 Python
python数据类型可变不可变知识点总结
Mar 06 Python
python selenium操作cookie的实现
Mar 18 Python
python 字典item与iteritems的区别详解
Apr 25 Python
Python如何读取、写入CSV数据
Jul 28 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
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
Django 静态文件配置过程详解
2019/07/23 Python
numpy.array 操作使用简单总结
2019/11/08 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
python 命名规范知识点汇总
2020/02/14 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
大学生军训自我评价分享
2013/11/09 职场文书
工商治理实习生的自我评价
2014/01/15 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
css之clearfix的用法深入理解(必看篇)
2023/05/21 HTML / CSS