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编程语言的35个与众不同之处(语言特征和使用技巧)
Jul 07 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
Python之reload流程实例代码解析
Jan 29 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
pycharm修改界面主题颜色的方法
Jan 17 Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 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 高手之路(二)
2006/10/09 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
php页面缓存方法小结
2015/01/10 PHP
php简单防盗链实现方法
2015/07/29 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
iframe子父页面调用js函数示例
2013/11/07 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
微信小程序 教程之WXML
2016/10/18 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
vue接口请求加密实例
2020/08/11 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python 绘图和可视化详细介绍
2017/02/11 Python
python中for用来遍历range函数的方法
2018/06/08 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
Linux的主要特性
2016/09/03 面试题
群众路线教育实践活动方案
2014/02/02 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
教师年度个人总结
2015/02/11 职场文书
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android