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 链接和操作 memcache方法
Mar 04 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
浅谈Python NLP入门教程
Dec 25 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
Django对models里的objects的使用详解
Aug 17 Python
Python FtpLib模块应用操作详解
Dec 12 Python
Python hashlib模块实例使用详解
Dec 24 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
Jan 13 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
Python脚本破解压缩文件口令实例教程(zipfile)
Jun 14 Python
python Pexpect模块的使用
Dec 25 Python
利用Python批量识别电子账单数据的方法
Feb 08 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实现快钱支付功能(涉及到接口)
2013/07/01 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
php字符串截取函数用法分析
2014/11/25 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python实现给字典添加条目的方法
2014/09/25 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
业务代表的岗位职责
2013/11/16 职场文书
测控技术与仪器个人求职信范文
2013/12/30 职场文书
小学生手册家长评语
2014/04/16 职场文书
公司离职证明标准样本
2014/10/05 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
内勤岗位职责
2015/02/10 职场文书
员工离职通知函
2015/04/25 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
Nginx反向代理配置的全过程记录
2021/06/22 Servers
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python