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爬取读者并制作成PDF
Mar 10 Python
Python基于pygame实现的font游戏字体(附源码)
Nov 11 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
在python image 中安装中文字体的实现方法
Aug 22 Python
python日志模块logbook使用方法
Sep 19 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
Python面向对象封装操作案例详解 II
Jan 02 Python
Python通过4种方式实现进程数据通信
Mar 12 Python
Python基础教程之输入输出和运算符
Jul 26 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中array_column函数简单实现方法
2016/07/11 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
php输出形式实例整理
2020/05/05 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
python实现倒计时小工具
2019/07/29 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
Python 串口通信的实现
2020/09/29 Python
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
家长会主持词
2014/03/26 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
工资证明格式模板
2015/06/12 职场文书
叶问观后感
2015/06/15 职场文书
2016春节放假通知范文
2015/08/18 职场文书
公司转让协议书
2016/03/19 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android