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中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
Python读写ini文件的方法
May 28 Python
使用python实现knn算法
Dec 20 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
Apr 05 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
python使用for循环计算0-100的整数的和方法
Feb 01 Python
超简单的Python HTTP服务
Jul 22 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python接口自动化框架实战
Dec 23 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
详解angular2.x创建项目入门指令
2018/10/11 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
Python编程实现使用线性回归预测数据
2017/12/07 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
python脚本和网页有何区别
2020/07/02 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
python 实现音频叠加的示例
2020/10/29 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
家长对孩子评语
2014/01/30 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
高三霸气励志标语
2014/06/24 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
工作证明书
2015/06/15 职场文书
田径运动会广播稿
2015/08/19 职场文书
多人股份制合作协议书
2016/03/19 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang