Python Pandas分组聚合的实现方法


Posted in Python onJuly 02, 2019

Pycharm 鼠标移动到函数上,CTRL+Q可以快速查看文档,CTR+P可以看基本的参数。

apply(),applymap()和map()

apply()和applymap()是DataFrame的函数,map()是Series的函数。

apply()的操作对象是DataFrame的一行或者一列数据,applymap()是DataFrame的每一个元素。map()也是Series中的每一个元素。

apply()对dataframe的内容进行批量处理, 这样要比循环来得快。如df.apply(func,axis=0,.....) func:定义的函数,axis=0时为对列操作,=1时为对行操作。

map()和python内建的没啥区别,如df['one'].map(sqrt)。

import numpy as np

from pandas import Series, DataFrame

 

frame = DataFrame(np.random.randn(4, 3),

         columns = list('bde'),

         index = ['Utah', 'Ohio', 'Texas', 'Oregon'])

print frame

print np.abs(frame)

print

 

f = lambda x: x.max() - x.min()

print frame.apply(f)

print frame.apply(f, axis = 1)

def f(x):

  return Series([x.min(), x.max()], index = ['min', 'max'])

print frame.apply(f)

print

 

print 'applymap和map'

_format = lambda x: '%.2f' % x

print frame.applymap(_format)

print frame['e'].map(_format)

Groupby

Groupby是Pandas中最为常用和有效的分组函数,有sum()、count()、mean()等统计函数。

groupby 方法返回的 DataFrameGroupBy 对象实际并不包含数据内容,它记录的是df['key1'] 的中间数据。当你对分组数据应用函数或其他聚合运算时,pandas 再依据 groupby 对象内记录的信息对 df 进行快速分块运算,并返回结果。

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],

        'key2': ['one', 'two', 'one', 'two', 'one'],

        'data1': np.random.randn(5),

        'data2': np.random.randn(5)})

grouped = df.groupby(df['key1'])

print grouped.mean() 



df.groupby(lambda x:'even' if x%2==0 else 'odd').mean() #通过函数分组

聚合agg()

对于分组的某一列(行)或者多个列(行,axis=0/1),应用agg(func)可以对分组后的数据应用func函数。例如:用grouped['data1'].agg('mean')也是对分组后的'data1'列求均值。当然也可以同时作用于多个列(行)和使用多个函数上。

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],

        'key2': ['one', 'two', 'one', 'two', 'one'],

        'data1': np.random.randn(5),

        'data2': np.random.randn(5)})

grouped = df.groupby('key1')

print grouped.agg('mean')

 

     data1   data2

key1          

a   0.749117 0.220249

b  -0.567971 -0.126922

apply()和agg()功能上差不多,apply()常用来处理不同分组的缺失数据的填充和top N的计算,会产生层级索引。

而agg可以同时传入多个函数,作用于不同的列。

df = DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'],

        'key2': ['one', 'two', 'one', 'two', 'one'],

        'data1': np.random.randn(5),

        'data2': np.random.randn(5)})

grouped = df.groupby('key1')

print grouped.agg(['sum','mean'])
print grouped.apply(np.sum)  #apply的在这里同样适用,只是不能传入多个,这两个函数基本是可以通用的。

         data1               data2         
           sum      mean       sum      mean
key1                                       
a     2.780273  0.926758 -1.561696 -0.520565
b    -0.308320 -0.154160 -1.382162 -0.691081

         data1     data2 key1       key2
key1                                   
a     2.780273 -1.561696  aaa  onetwoone
b    -0.308320 -1.382162   bb     onetwo

apply和agg功能上基本是相近的,但是多个函数的时候还是agg比较方便。

apply本身的自由度很高,如果分组之后不做聚合操作紧紧是一些观察的时候,apply就有用武之地了。

print grouped.apply(lambda x: x.describe())

 

        data1   data2

key1             

a  count 3.000000 3.000000

   mean -0.887893 -1.042878

   std  0.777515 1.551220

   min  -1.429440 -2.277311

   25%  -1.333350 -1.913495

   50%  -1.237260 -1.549679

   75%  -0.617119 -0.425661

   max  0.003021 0.698357

b  count 2.000000 2.000000

   mean -0.078983 0.106752

   std  0.723929 0.064191

   min  -0.590879 0.061362

   25%  -0.334931 0.084057

   50%  -0.078983 0.106752

   75%  0.176964 0.129447

   max  0.432912 0.152142

此外apply还能改变返回数据的维度。

http://pandas.pydata.org/pandas-docs/stable/groupby.html

此外还有透视表pivot_table ,交叉表crosstab ,但是我没用过。

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

Python 相关文章推荐
python使用xauth方式登录饭否网然后发消息
Apr 11 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
python Pygame的具体使用讲解
Nov 03 Python
详解python里的命名规范
Jul 16 Python
详解Python3中ceil()函数用法
Feb 19 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
python opencv实现信用卡的数字识别
Jan 12 Python
python判断链表是否有环的实例代码
Jan 31 Python
关于python中的xpath解析定位
Mar 06 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
Mar 09 Python
Python爬虫requests库多种用法实例
May 28 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 #Python
python flask框架实现重定向功能示例
Jul 02 #Python
python实现串口自动触发工作的示例
Jul 02 #Python
python常用函数与用法示例
Jul 02 #Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 #Python
python for和else语句趣谈
Jul 02 #Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 #Python
You might like
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
js中apply和call的理解与使用方法
2019/11/27 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
Python单例模式的两种实现方法
2017/08/14 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
python字符串的index和find的区别详解
2020/06/20 Python
python如何安装下载后的模块
2020/07/03 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
运动会广播稿200米
2014/01/27 职场文书
财务总经理岗位职责
2014/02/16 职场文书
信息总监管理职责范本
2014/03/08 职场文书
海飞丝广告词
2014/03/20 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
升学宴学生答谢词
2015/01/05 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python