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中字典创建、遍历、添加等实用操作技巧合集
Jun 02 Python
Django自定义认证方式用法示例
Jun 23 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
Python三级菜单的实例
Sep 13 Python
浅谈python中的正则表达式(re模块)
Oct 17 Python
Python贪心算法实例小结
Apr 22 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
python爬取微博评论的实例讲解
Jan 15 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 Python
Python绘制词云图之可视化神器pyecharts的方法
Feb 23 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 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适配器模式介绍
2012/08/14 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
VeeValidate在vue项目里表单校验应用案例
2018/05/09 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
python 中random模块的常用方法总结
2017/07/08 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
python画双y轴图像的示例代码
2019/07/07 Python
Python 实现自动获取种子磁力链接方式
2020/01/16 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
程序集与命名空间有什么不同
2014/07/25 面试题
一份报关员的职业规划范文
2014/01/08 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
经营理念标语
2014/06/21 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
SQL中的三种去重方法小结
2021/11/01 SQL Server
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript