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 相关文章推荐
Python3写入文件常用方法实例分析
May 22 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
简单谈谈Python中的几种常见的数据类型
Feb 10 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
python批量识别图片指定区域文字内容
Apr 30 Python
opencv实现简单人脸识别
Feb 19 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
keras 读取多标签图像数据方式
Jun 12 Python
如何用Python 加密文件
Sep 10 Python
Django框架中视图的用法
Jun 10 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无序树实现方法
2015/07/28 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
ajax异步请求详解
2017/01/06 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
Python中字符串对齐方法介绍
2015/05/21 Python
详解Django中的权限和组以及消息
2015/07/23 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
python加载自定义词典实例
2019/12/06 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
澳大利亚电子产品购物网站:Dick Smith
2017/02/02 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
建筑专业毕业生推荐信
2013/11/21 职场文书
植树节口号
2014/06/21 职场文书
工商行政处罚决定书
2015/06/24 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python
Python学习之os包使用教程详解
2022/03/21 Python
Linux中文件的基本属性介绍
2022/06/01 Servers