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实现查找系统盘中需要找的字符
Jul 14 Python
python+Django+apache的配置方法详解
Jun 01 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
python实现简易通讯录修改版
Mar 13 Python
pip安装py_zipkin时提示的SSL问题对应
Dec 29 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
python 使用raw socket进行TCP SYN扫描实例
May 05 Python
Python3自定义json逐层解析器代码
May 11 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
pytorch实现ResNet结构的实例代码
May 17 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 has encountered an Access Violation
2007/01/15 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
yii实现级联下拉菜单的方法
2014/07/31 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python使用gRPC传输协议教程
2018/10/16 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
python全栈知识点总结
2019/07/01 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
小学生新年寄语
2014/04/03 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
就业推荐表导师评语
2014/12/31 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python