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的函数嵌套的使用方法
Jan 24 Python
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
Nov 05 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
全面了解python字符串和字典
Jul 07 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
python @classmethod 的使用场合详解
Aug 23 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 Python
python爬取招聘要求等信息实例
Nov 20 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中使用Oracle数据库(6)
2006/10/09 PHP
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
php array的学习笔记
2012/05/16 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
JS判断数组那点事
2017/10/10 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
简单介绍Python中的RSS处理
2015/04/13 Python
python制作抖音代码舞
2019/04/07 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
python3 反射的四种基本方法解析
2019/08/26 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
医科大学生毕业的自我评价分享
2013/11/12 职场文书
上课说话检讨书大全
2014/01/22 职场文书
中学生操行评语大全
2014/04/24 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
委托书的写法
2014/09/16 职场文书
母亲节寄语大全
2015/02/27 职场文书
工作服管理制度范本
2015/08/06 职场文书
小学班级标语口号大全
2015/12/26 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书