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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
详解python并发获取snmp信息及性能测试
Mar 27 Python
Python操作csv文件实例详解
Jul 31 Python
Bottle框架中的装饰器类和描述符应用详解
Oct 28 Python
Python Grid使用和布局详解
Jun 30 Python
python绘制漏斗图步骤详解
Mar 04 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
python读取文件指定行内容实例讲解
Mar 02 Python
python3将变量写入SQL语句的实现方式
Mar 02 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 Python
python基础之文件操作
Oct 24 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脚本不报错的原因
2014/06/12 PHP
PHP实现事件机制的方法
2015/07/10 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
Javascript开发包大全整理
2006/12/22 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
layui table数据修改的回显方法
2019/09/04 Javascript
python函数形参用法实例分析
2015/08/04 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
Python新手学习函数默认参数设置
2020/06/03 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
《中华少年》教学反思
2014/02/15 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
个人授权委托书
2014/04/03 职场文书
网络技术专业求职信
2014/07/13 职场文书
代办社保委托书范文
2014/10/06 职场文书
2015中学学校工作总结
2015/07/20 职场文书
《火烧云》教学反思
2016/02/23 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python