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分析git log日志示例
Feb 27 Python
Python文件夹与文件的操作实现代码
Jul 13 Python
纯python实现机器学习之kNN算法示例
Mar 01 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
python 输出所有大小写字母的方法
Jan 02 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
python实现复制大量文件功能
Aug 31 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
python实现低通滤波器代码
Feb 26 Python
python多线程爬取西刺代理的示例代码
Jan 30 Python
Python torch.flatten()函数案例详解
Aug 30 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递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
PHP回调函数概念与用法实例分析
2017/11/03 PHP
php时间戳转换代码详解
2019/08/04 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
js event事件的传递与冒泡处理
2009/12/06 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
Three.js基础学习教程
2017/11/16 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
python映射列表实例分析
2015/01/26 Python
wxpython实现图书管理系统
2018/03/12 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
python实现列表的排序方法分享
2019/07/01 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
会计专业自我鉴定范文
2013/12/29 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
质量保证书
2015/01/17 职场文书
员工辞职信范文
2015/03/02 职场文书
医院志愿者活动总结
2015/05/06 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书