相关知识

groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False)

参数说明:

by是指分组依据(列表、字典、函数,元组,Series)

axis:是作用维度(0为行,1为列)

level:根据索引级别分组

sort:对groupby分组后新的dataframe中索引进行排序,sort=True为升序,

as_index:在groupby中使用的键是否成为新的dataframe中的索引,默认as_index=True

group_keys:在调用apply时,将group键添加到索引中以识别片段

squeeze :如果可能的话,减少返回类型的维数,否则返回一个一致的类型

grouping操作(split-apply-combine)

数据的分组&聚合 -- 什么是groupby 技术?

在数据分析中,我们往往需要在将数据拆分,在每一个特定的组里进行运算。比如根据教育水平和年龄段计算某个城市的工作人口的平均收入。

pandas中的groupby提供了一个高效的数据的分组运算。

我们通过一个或者多个分类变量将数据拆分,然后分别在拆分以后的数据上进行需要的计算

我们可以把上述过程理解为三部:

1.拆分数据(split)

2.应用某个函数(apply)

3.汇总计算结果(aggregate)

下面这个演示图展示了“分拆-应用-汇总”的groupby思想

上图所示,分解步骤:

Step1 :数据分组—— groupby 方法

Step2 :数据聚合:

使用内置函数——sum / mean / max / min / count等

使用自定义函数—— agg ( aggregate ) 方法

自定义更丰富的分组运算—— apply 方法

实操

1.打开终端模拟器,在命令行输入ipython notebook --ip='127.0.0.1',在浏览器中会打开界面点击New,在其下拉框中选择Python3.

2.新建一个ipynb文件,用于编写并执行代码。

3.创建一个数据帧df。

import numpy as np
import pandas as pd
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],'C' : np.random.randn(8),'D' : np.random.randn(8)})
print(df)  

4.通过A列对df进行分布操作。

5.通过A、B列对df进行分组操作。

6.使用自定义函数进行分组操作,自定义一个函数,使用groupby方法并使用自定义函数给定的条件,按列对df进行分组。

def get_letter_type(letter):  if letter.lower() in 'aeiou':  return 'vowel'  else:  return 'consonant'  grouped = df.groupby(get_letter_type, axis=1)
for group in grouped:  print(group)  

7.创建一个Series名为s,使用groupby根据s的索引对s进行分组,返回分组后的新Series,对新Series进行first、last、sum操作。

lst = [1, 2, 3, 1, 2, 3]
s = pd.Series([1, 2, 3, 10, 20, 30], lst)
grouped = s.groupby(level=0)
#查看分组后的第一行数据
grouped.first()
#查看分组后的最后一行数据
grouped.last()
#对分组的各组进行求和
grouped.sum()  

8.分组排序,使用groupby进行分组时,默认是按分组后索引进行升序排列,在groupby方法中加入sort=False参数,可以进行降序排列。

df2=pd.DataFrame({'X':['B','B','A','A'],'Y':[1,2,3,4]})
#按X列对df2进行分组,并求每组的和
df2.groupby(['X']).sum()
#按X列对df2进行分组,分组时不对键进行排序,并求每组的和
df2.groupby(['X'],sort=False).sum()  

9.使用get_group方法得到分组后某组的值。

df3 = pd.DataFrame({'X' : ['A', 'B', 'A', 'B'], 'Y' : [1, 4, 3, 2]})
#按X列df3进行分组,并得到A组的df3值
df3.groupby(['X']).get_group('A')
#按X列df3进行分组,并得到B组的df3值
df3.groupby(['X']).get_group('B')  

10.使用groups方法得到分组后所有组的值。

11.查看分组对象的所有内置函数

使用groupby方法按A列对df进行分组操作,将结果赋值给grouped。

grouped=df.groupby(['A'])  

然后在命令行中输入grouped.(注意grouped后面有“.”),然后按Tab键,可以查看到所有的内置函数,如下图所示。

分组对象的所有的内置函数如下所示:

grouped.agg        grouped.boxplot    grouped.cummin     grouped.describe   grouped.filter     grouped.get_group  grouped.height     grouped.last       grouped.median     grouped.ngroups    grouped.plot       grouped.rank       grouped.std        grouped.transform
grouped.aggregate  grouped.count      grouped.cumprod    grouped.dtype      grouped.first      grouped.groups     grouped.hist       grouped.max        grouped.min        grouped.nth        grouped.prod       grouped.resample   grouped.sum        grouped.var
grouped.apply      grouped.cummax     grouped.cumsum     grouped.fillna     grouped.gender     grouped.head       grouped.indices    grouped.mean       grouped.name       grouped.ohlc       grouped.quantile   grouped.size       grouped.tail       grouped.weight  

12.多级索引分组,创建一个有两级索引的Series,并使用两个方法对Series进行分组并求和。

13.复合分组,对s按first、second进行分组并求和。

14.复合分组(按索引和列),创建数据帧df,使用索引级别和列对df进行分组。

15.对df进行分组,将分组后C列的值赋值给grouped,统计grouped中每类的个数。

16.对上面创建的df的C列,按A列值进行分组并求和。

17.遍历分组结果,通过A,B两列对df进行分组,分组结果的组名为元组。

18.通过A列对df进行分组,并查看分组对象的bar列。

19.按A,B两列对df进行分组,并查看分组对象中bar、one都存在的部分。

注意:当分组按两列来分时,查看分组对象也应该包含每列的一部分。

聚集

20.聚合操作,按A列对df进行分组,使用聚合函数aggregate求每组的和。

按A、B两列对df进行分组,并使用聚合函数aggregate对每组求和。

grouped=df.groupby(['A','B'])
grouped.aggregate(np.sum)  

注意:通过上面的结果可以看到。聚合完成后每组都有一个组名作为新的索引,使用as_index=False可以忽略组名。

21.当as_index=True时,在groupby中使用的键将成为新的dataframe中的索引。按A、B两列对df进行分组,这是使参数as_index=False,再使用聚合函数aggregate求每组的和。

grouped=df.groupby(['A','B'],as_index=False)
grouped.aggregate(np.sum)  

22.使用reset_index函数可以得到与参数as_index=False相同的结果。

23.聚合操作,按A、B列对df进行分组,使用size方法,求每组的大小。返回一个Series,索引是组名,值是每组的大小。

24.聚合操作,对分组grouped进行统计描述。

注意:聚合函数可以减少数据帧的维度,常用的聚合函数有:mean、sum、size、count、std、var、sem 、describe、first、last、nth、min、max。

执行多个函数在一个分组结果上:在分组返回的Series中我们可以通过一个聚合函数的列表或一个字典去操作series,返回一个DataFrame。

25.按A列对df进行分组,再对分组结果grouped的C列进行sum、mean、std三个聚合操作。

26.聚合操作,使用agg方法对分组结果grouped进行sum、mean、std操作。

27.对分组结果grouped的C列进行sum、mean、std三个聚合操作,然后使用rename方法修改返回结果中的列名,将sum.mean,std分别替换为:foo,bar,baz。

28.作用不同的聚合函数到DataFrame的不同列上,通过聚合函数的一个字典作用不同的聚合函数到一个DataFrame的列上。

对分组结果grouped进行聚合操作,C列上作用sum函数,D列上作用std函数并使参数ddof=1。

29.transform操作:对数组在分组内进行转换,而不是全局转换。

index = pd.date_range('10/1/1999', periods=1100)
ts = pd.Series(np.random.normal(0.5, 2, 1100), index)
ts = ts.rolling(window=100,min_periods=100).mean().dropna()
ts.head()
ts.tail()  

filter操作:filter方法返回的是原对象的一个子集。

30.创建一个Series值为[1,1,2,3,3,3]并命名为sf,对sf按sf进行分组,然后过滤出每组的和大于2的值。

pandas——groupby操作相关推荐

  1. 数据分析利器,25个例子学会Pandas Groupby 操作!

    点击上方"菜学Python",选择"星标"公众号 超级无敌干货,第一时间送达!!! 来源丨DeepHub IMBA 大家好,我是菜鸟哥. groupby是Pan ...

  2. 25个例子学会Pandas Groupby 操作(附代码)

    来源:DeepHub IMBA 本文约2300字,建议阅读5分钟本文用25个示例详细介绍groupby的函数用法. groupby是Pandas在数据分析中最常用的函数之一.它用于根据给定列中的不同值 ...

  3. 玩转 Pandas 的 Groupby 操作

    作者:Lemon 来源:Python数据之道 玩转 Pandas 的 Groupby 操作 大家好,我是 Lemon,今天来跟大家分享下 pandas 中 groupby 的用法. Pandas 的 ...

  4. 10000字的Pandas核心操作知识大全!

    来源丨数据不吹牛 工作中最近常用到pandas做数据处理和分析,特意总结了以下常用内容.想下载到本地可访问以下地址 https://github.com/SeafyLiang/Python_study ...

  5. pandas 按字符串肚脐眼 读取数据_十分钟学习pandas! pandas常用操作总结!

    学习Python, 当然少不了pandas,pandas是python数据科学中的必备工具,熟练使用pandas是从sql boy/girl 跨越到一名优秀的数据分析师傅的必备技能. 这篇pandas ...

  6. python处理表格数据教程_用Python的pandas框架操作Excel文件中的数据教程

    引言 本文的目的,是向您展示如何使用pandas来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其他地方找到的复杂功能同等重要.作为额外的福利,我将会进行一些 ...

  7. Pandas常用操作总结

    文章目录 前言 1.DF常用的两种创建方式 方式一:通过np来生成 方式二:通过字典来生成 2.pandas常用的属性及方法 3.Pandas Select(数据选择) 4.Pandas Set_va ...

  8. python读取xlsx文件pandas_用Python的pandas框架操作Excel文件中的数据教程

    引言 本文的目的,是向您展示如何使用pandas来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其他地方找到的复杂功能同等重要.作为额外的福利,我将会进行一些 ...

  9. 20 个短小精悍的 pandas 骚操作

    本次为大家整理了一个pandas骚操作操作的大集合,共20个功能,个个短小精悍,一次让你爱个够. 1. ExcelWriter 很多时候dataframe里面有中文,如果直接输出到csv里,中文将显示 ...

最新文章

  1. python零基础入门教材-Python零基础入门到精通自学视频教程
  2. linux乌邦图更改ip,Linux系统下图形界面更改IP地址分享
  3. string是线程安全的么_Java-21 多线程 - 是阿凯啊
  4. 多媒体计算机辅助教学与课件制作,清华大学出版社-图书详情-《计算机辅助教学多媒体课件设计制作与应用》...
  5. Timer源码之TaskQueue
  6. 走在网页游戏开发的路上——页游资源管理
  7. matplotlib——3D图
  8. 多目标狼群优化算法(MGWO)
  9. IDEA 常用插件安装
  10. Rayman的绝顶之路——Leetcode每日一题打卡16
  11. 小程序报错 出现脚本错误或者未正确调用 Page()
  12. 快手上用计算机打歌的名儿叫什么意思,快手起什么名字容易火?快手网名怎么起独特...
  13. 我的MSN机器人终于有了自己的头像
  14. logstash String转data,@timestamp转化为东八区时间
  15. 信息检索经典文章-1
  16. oracle自己主动维护
  17. java web分享ppt大纲 -- servlet容器简介
  18. 机器学习算法优缺点总结
  19. (六)Docker三剑客之Swarm
  20. C语言程序——求学生总成绩和平均成绩

热门文章

  1. 要想孩子写作文没烦恼?建议家长这样做
  2. 2017年终总结No.78
  3. Python3 urllib 爬取 花瓣网图片
  4. “膏腴桃花乡·品质中国红” 店埠胡萝卜种出富民大产业
  5. struts2控制器及拦截器返回JSON格式数据
  6. ES 插入文档报错:Rejecting mapping update to [testindex] as the final mapping would have more than 1 type
  7. 我的JAVA面试题备忘录
  8. 沁恒CH582M开发板-1-点亮LED
  9. GitBubble已在GitCafe开源
  10. Flowable 6.4.x工作流