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命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
浅析Python数据处理
May 02 Python
python list转矩阵的实例讲解
Aug 04 Python
python 把列表转化为字符串的方法
Oct 23 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
python时间日期操作方法实例小结
Feb 06 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
django rest framework 过滤时间操作
Jul 12 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
Python内置函数property()如何使用
Sep 01 Python
史上最详细的Python打包成exe文件教程
Jan 17 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 Undefined index的问题
2009/06/01 PHP
PHP 正则表达式小结
2015/02/12 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
python中的sort方法使用详解
2014/07/25 Python
python使用arp欺骗伪造网关的方法
2015/04/24 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
Python实现快速计算词频功能示例
2018/06/25 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
Django 返回json数据的实现示例
2020/03/05 Python
公务员试用期满考核材料
2014/05/22 职场文书
法人代表证明书
2014/09/18 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android