快乐学习Pandas-分组

详细内容可以参考:https://github.com/datawhalechina/joyful-pandas第三章内容
本文将就可能理解起来会有问题的几个内容进行介绍。

一、SAC过程

1. 内涵
SAC指的是分组操作中的split-apply-combine过程
其中split指基于某一些规则,将数据拆成若干组,apply是指对每一组独立地使用函数,combine指将每一组的结果组合成某一类数据结构
2. apply过程
在该过程中,我们实际往往会遇到四类问题:
整合(Aggregation)——即分组计算统计量(如求均值、求每组元素个数)
变换(Transformation)——即分组对每个单元的数据进行操作(如元素标准化)
过滤(Filtration)——即按照某些规则筛选出一些组(如选出组内某一指标小于50的组)
综合问题——即前面提及的三种问题的混合

二、groupby函数

1. 分组函数的基本内容:

(e)level参数(用于多级索引)和axis参数`
import numpy as np
import pandas as pd
df = pd.read_csv('data/table.csv',index_col='ID')
df.head()
df.set_index(['Gender','School']).groupby(level=0,axis=0).get_group('M').head()
# 设置'Gender','School'为新的索引,得到一个多级索引,level=0表示按Gender分组,并取出M组前5行
#可以尝试下面语句的输出
#df.set_index(['Gender','School']).groupby(level=1,axis=0).get_group('S_1').head()

2. groupby对象的特点

(b)分组对象的head和first

对分组对象使用head函数,返回的是每个组的前几行,而不是数据集前几行

grouped_single = df.groupby('School')
grouped_single.head(2)

first显示的是以分组为索引的每组的第一行信息

grouped_single.first()
#将分组的列变为索引列并显示每个分组的第一行,排列顺序按字母顺序。
(c)分组依据

对于groupby函数而言,分组的依据是非常自由的,只要是与数据框长度相同的列表即可,同时支持函数型分组`

df.groupby(np.random.choice(['a','b','c'],df.shape[0])).get_group('a').head()
#相当于将np.random.choice(['a','b','c'],df.shape[0])当做新的一列进行分组
#随机产生df.shape[0]长度的从'a','b','c'选出的ndarray数据,并取出‘a’分组的前5个值

从原理上说,我们可以看到利用函数时,传入的对象就是索引,因此根据这一特性可以做一些复杂的操作

df[:5].groupby(lambda x:print(x)).head(10)
#df中前5行数据按索引分组,相当于y以每个索引分组,无实际意义,只是看到传入的对象是索引这样的规律。

注意:为了观察传入的参数,常用上述代码中匿名函数的方式进行打印,观察传入的对象类型。

根据奇偶行分组

df.groupby(lambda x:'奇数行' if not df.index.get_loc(x)%2==1 else '偶数行').groups
#注意df.index.get_loc(x)对应的是0,1,2...的索引值,所以奇数行对应余数为0的索引,刚好相反
(e)连续型变量分组

例如利用cut函数对数学成绩分组:

bins = [0,40,60
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值