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实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
Python连接数据库学习之DB-API详解
Feb 07 Python
python机器学习之神经网络(二)
Dec 20 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
python实现批量图片格式转换
Jun 16 Python
python实现求两个字符串的最长公共子串方法
Jul 20 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
django为Form生成的label标签添加class方式
May 20 Python
Python参数传递对象的引用原理解析
May 22 Python
Python字符串格式化方式
Apr 07 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程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
微信小程序实现限制用户转发功能的实例代码
2020/02/22 Javascript
python批量修改文件后缀示例代码分享
2013/12/24 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
python搜索包的路径的实现方法
2019/07/19 Python
pytorch打印网络结构的实例
2019/08/19 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
如何表示python中的相对路径
2020/07/08 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
单位介绍信范文
2014/01/18 职场文书
品酒会策划方案
2014/05/26 职场文书
奥运会口号
2014/06/13 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA