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 相关文章推荐
pycharm 使用心得(四)显示行号
Jun 05 Python
Python闭包实现计数器的方法
May 05 Python
Python实现的桶排序算法示例
Nov 29 Python
详解python 拆包可迭代数据如tuple, list
Dec 29 Python
对Python中9种生成新对象的方法总结
May 23 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 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
模拟flock实现文件锁定
2007/02/14 PHP
php中的数组操作函数整理
2008/08/18 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
python如何修改装饰器中参数
2018/03/20 Python
pandas取出重复数据的方法
2019/07/04 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
英国电器零售商:PRC Direct
2018/06/21 全球购物
PHP面试题大全
2015/10/16 面试题
遗嘱公证书标准样本
2014/04/08 职场文书