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中元类用法实例
Oct 10 Python
Python字符串中查找子串小技巧
Apr 10 Python
python爬取淘宝商品详情页数据
Feb 23 Python
Python键盘输入转换为列表的实例
Jun 23 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
Python异常处理例题整理
Jul 07 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
pytorch模型存储的2种实现方法
Feb 14 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
高考考python编程是真的吗
Jul 20 Python
pycharm全局搜索的具体步骤
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
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
Javascript动画的实现原理浅析
2015/03/02 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
Python语法分析之字符串格式化
2019/06/13 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
Python 在局部变量域中执行代码
2020/08/07 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
物理课外活动总结
2014/08/27 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
2015党建工作简报
2015/07/21 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android