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实现将数据库一键导出为Excel表格的实例
Dec 30 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
Python数据结构之图的应用示例
May 11 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
Python实现操纵控制windows注册表的方法分析
May 24 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
Keras: model实现固定部分layer,训练部分layer操作
Jun 28 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
python中__call__内置函数用法实例
2015/06/04 Python
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
HTML5之语义标签介绍
2016/07/07 HTML / CSS
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
导游词之沈阳清昭陵
2019/12/28 职场文书
python - timeit 时间模块
2021/04/06 Python