Pandas聚合运算和分组运算的实现示例


Posted in Python onOctober 17, 2019

1.聚合运算

(1)使用内置的聚合运算函数进行计算

1>内置的聚合运算函数

sum(),mean(),max(),min(),size(),describe()...等等

2>应用聚合运算函数进行计算

import numpy as np
import pandas as pd
#创建df对象
dict_data = {
  'key1':['a','b','c','d','a','b','c','d'],
  'key2':['one','two','three','one','two','three','one','two'],
  'data1':np.random.randint(1,10,8),
  'data2':np.random.randint(1,10,8)
}
 
df = pd.DataFrame(dict_data)
print(df)
'''
  data1 data2 key1  key2
0   3   4  a  one
1   7   9  b  two
2   5   7  c three
3   3   4  d  one
4   8   7  a  two
5   4   7  b three
6   8   9  c  one
7   4   4  d  two
'''
#根据key1分组,进行sum()运算
df = df.groupby('key1').sum()
print(df)
'''
key1       
a    12   10
b     8   5
c     8   11
d    16   13
'''
#内置的聚合函数
print(df.groupby('key1').sum())
print('*'*50)
print(df.groupby('key1').max())
print('*'*50)
print(df.groupby('key1').min())
print('*'*50)
print(df.groupby('key1').mean())
print('*'*50)
print(df.groupby('key1').size())
print('*'*50)
#分组中非Nan数据的数量
print(df.groupby('key1').count())
print('*'*50)
print(df.groupby('key1').describe())

(2)自定义聚合函数进行计算

在使用自定义聚合函数的时候,需要用到一个agg()函数

#自定义聚合函数
#最大值-最小值
def peak_range(df):
  #返回数据范围差值
  return df.max()**2 - df.min()**2
 
#agg() 可以将聚合计算的结果祖闯成一个dataframe对象返回
 
print(df.groupby('key1').agg(peak_range))
 
#lambda
print(df.groupby('key1').agg(lambda df:df.max()-df.min()))

(3)应用多个聚合函数,默认列索引为函数名

#应用多个聚合函数,默认列索引为函数名
#通过元素重新命名列索引('列索引',函数)
print(df.groupby('key1').agg(['sum','std','mean',('range',peak_range)]))
'''
   data1           data2           
    sum    std mean range  sum    std mean range
key1                           
a    10 2.828427 5.0  40  12 2.828427 6.0  48
b    10 5.656854 5.0  80   8 1.414214 4.0  16
c    6 1.414214 3.0  12   9 0.707107 4.5   9
d    15 0.707107 7.5  15   8 2.828427 4.0  32
'''

(4)指定每一列使用某个聚合运算函数

#指定每一列使用某个聚合运算函数
print(df.groupby('key1').agg({'data1':'mean','data2':'sum'}))
'''
   data1 data2
key1       
a    5.0   12
b    5.0   8
c    3.0   9
d    7.5   8
'''

2.分组运算

(1)进行分组运算,并在运算后的结果列索引前加前缀

加前缀用到add_prefix('前缀')函数

#创建df对象
dict_data = {
  'key1':['a','b','c','d','a','b','c','d'],
  'key2':['one','two','three','one','two','three','one','two'],
  'data1':np.random.randint(1,10,8),
  'data2':np.random.randint(1,10,8)
}
 
df = pd.DataFrame(dict_data)
print(df)
'''
  data1 data2 key1  key2
0   1   5  a  one
1   9   3  b  two
2   3   6  c three
3   6   9  d  one
4   8   4  a  two
5   5   5  b three
6   9   6  c  one
7   4   1  d  two
'''
#按照key1分组,进行sum()运算
#在运算结果的列索引前添加前缀
k1_sum = df.groupby('key1').sum().add_prefix('sum_')
print(k1_sum)
'''
   sum_data1 sum_data2
key1           
a       9     9
b      14     8
c      12     12
d      10     10
'''

(2)进行分组运算,并把原始数据和结果数据合并

#创建df对象
dict_data = {
  'key1':['a','b','c','d','a','b','c','d'],
  'key2':['one','two','three','one','two','three','one','two'],
  'data1':np.random.randint(1,10,8),
  'data2':np.random.randint(1,10,8)
}
 
df = pd.DataFrame(dict_data)
print(df)
'''
  data1 data2 key1  key2
0   1   5  a  one
1   9   3  b  two
2   3   6  c three
3   6   9  d  one
4   8   4  a  two
5   5   5  b three
6   9   6  c  one
7   4   1  d  two
'''
#按照key1分组,进行sum()运算
#在运算结果的列索引前添加前缀
k1_sum = df.groupby('key1').sum().add_prefix('sum_')
print(k1_sum)
'''
   sum_data1 sum_data2
key1           
a       9     9
b      14     8
c      12     12
d      10     10
'''
#将运算结果和原始数据拼接到一起
#参数1:原始数据
#参数2:运算结果数据
pd.merge(df,k1_sum,left_on='key1',right_index=True)

(3)使用transform()函数,将计算结果按照原始数据排序成一个DataFrame对象

#创建df对象
dict_data = {
  'key1':['a','b','c','d','a','b','c','d'],
  'key2':['one','two','three','one','two','three','one','two'],
  'data1':np.random.randint(1,10,8),
  'data2':np.random.randint(1,10,8)
}
 
df = pd.DataFrame(dict_data)
print(df)
'''
  data1 data2 key1  key2
0   1   5  a  one
1   9   3  b  two
2   3   6  c three
3   6   9  d  one
4   8   4  a  two
5   5   5  b three
6   9   6  c  one
7   4   1  d  two
'''
#按照key1分组,进行sum()运算
#在运算结果的列索引前添加前缀
k1_sum = df.groupby('key1').sum().add_prefix('sum_')
print(k1_sum)
'''
   sum_data1 sum_data2
key1           
a       9     9
b      14     8
c      12     12
d      10     10
'''
#transform() 计算 会将计算的结果按照原始数据的排序组装成一个dataframe对象
k1_sum_tf = df.groupby('key1').transform(np.sum).add_prefix('sum_')
# print(k1_sum_tf.columns)
 
#把运算结果数据拼接到原始数据后
df[k1_sum_tf.columns] = k1_sum_tf
print(df)
'''
  data1 data2 key1  key2 sum_data1 sum_data2 sum_key2
0   5   4  a  one     9    12  onetwo
1   3   3  b  two     5    12 twothree
2   9   2  c three    14     9 threeone
3   6   5  d  one    11     9  onetwo
4   4   8  a  two     9    12  onetwo
5   2   9  b three     5    12 twothree
6   5   7  c  one    14     9 threeone
7   5   4  d  two    11     9  onetwo
'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python发送伪造的arp请求
Jan 09 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
详解Swift中属性的声明与作用
Jun 30 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
Python批量查询关键词微信指数实例方法
Jun 27 Python
Python shelve模块实现解析
Aug 28 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
python中常用的数据结构介绍
Jan 12 Python
ROS系统将python包编译为可执行文件的简单步骤
Jul 25 Python
Python pandas之求和运算和非空值个数统计
Aug 07 Python
python分分钟绘制精美地图海报
Feb 15 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 #Python
python numpy中cumsum的用法详解
Oct 17 #Python
python hashlib加密实现代码
Oct 17 #Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 #Python
python模块常用用法实例详解
Oct 17 #Python
Python 使用元类type创建类对象常见应用详解
Oct 17 #Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 #Python
You might like
php和javascript之间变量的传递实现代码
2012/12/19 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
Python线程详解
2015/06/24 Python
python根据日期返回星期几的方法
2015/07/06 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
Django验证码的生成与使用示例
2017/05/20 Python
python实现雨滴下落到地面效果
2018/06/21 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
生日礼品店创业计划书范文
2014/03/21 职场文书
三年级小学生评语
2014/04/22 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
SQL中的三种去重方法小结
2021/11/01 SQL Server