Python中的groupby分组

Python中的groupby分组写在前面:之前我对于groupby一直都小看了,而且感觉理解得不彻底,虽然在另外一篇文章中也提到groupby的用法,但是这篇文章想着重地分析一下,并能从自己的角度分析一下groupby这个好东西~OUTLINE根据表本身的某一列或多列内容进行分组聚合通过字典或者Series进行分组根据表本身的某一列或多列内容进行分组聚合这个是groupby的最常见操作,根据…

大家好,又见面了,我是你们的朋友全栈君。

写在前面:之前我对于groupby一直都小看了,而且感觉理解得不彻底,虽然在另外一篇文章中也提到groupby的用法,但是这篇文章想着重地分析一下,并能从自己的角度分析一下groupby这个好东西~

OUTLINE

  • 根据表本身的某一列或多列内容进行分组聚合
  • 通过字典或者Series进行分组

根据表本身的某一列或多列内容进行分组聚合

这个是groupby的最常见操作,根据某一列的内容分为不同的维度进行拆解,将同一维度的再进行聚合

  • 按一列进行聚合
import pandas as pd
import numpy as np
df = pd.DataFrame({
  
  'key1':list('aabba'),
                  'key2': ['one','two','one','two','one'],
                  'data1': np.random.randn(5),
                  'data2': np.random.randn(5)})

Python中的groupby分组

for i in df.groupby('key1'):
    print(i)
# 输出:
('a',       data1     data2 key1 key2
0 -0.293828  0.571930    a  one
1  1.872765  1.085445    a  two
4 -1.943001  0.106842    a  one)
('b',       data1     data2 key1 key2
2 -0.466504  1.262140    b  one
3 -1.125619 -0.836119    b  two)
  • 按多列进行聚合,则看的是多列之间维度的笛卡尔积

比如按照key1列,可以分为a和b两个维度,按照key2列可以分为one和two两个维度,最后groupby这两列之后的结果就是四个group。

for i in df.groupby(['key1','key2']):
    print(i)
# 输出:
(('a', 'one'),       data1     data2 key1 key2
0 -0.293828  0.571930    a  one
4 -1.943001  0.106842    a  one)
(('a', 'two'),       data1     data2 key1 key2
1  1.872765  1.085445    a  two)
(('b', 'one'),       data1    data2 key1 key2
2 -0.466504  1.26214    b  one)
(('b', 'two'),       data1     data2 key1 key2
3 -1.125619 -0.836119    b  two)

通过字典或者Series进行分组

问题情境:一共有5个同学分别对5样东西做了一个评价,0-5表示对该物品的喜爱程度,随着数值的升高,程度也在不断加深。

import pandas as pd
import numpy as np
import random
people=pd.DataFrame(
  np.random.randint(low=0,high=6,size=(5,5)),
  columns=['香蕉','苹果','橘子','眼影','眼线'],
  index=['Joe','Steve','Wes','Jim','Travis']
)

Python中的groupby分组

但是可以明显发现这五样物品可以分为两类:“水果”和“化妆品”。

问题:我想知道这五名同学对水果和化妆品的平均喜爱程度是什么样的?

solution1:通过字典分组

mapping = {
  
  '香蕉':'水果','苹果':'水果','橘子':'水果','眼影':'化妆品','眼线':'化妆品'}
data = people.groupby(mapping,axis=1).mean()

Python中的groupby分组

solution2:通过Series分组

mapping2 = pd.Series(mapping)
# mapping2
橘子     水果
眼影    化妆品
眼线    化妆品
苹果     水果
香蕉     水果
dtype: object

之后将Series传入

data2 = people.groupby(mapping2,axis=1).mean()

无论solution1还是2,本质上,都是找index(Series)或者key(字典)与数据表本身的行或者列之间的对应关系,在groupby之后所使用的聚合函数都是对每个group的操作,聚合函数操作完之后,再将其合并到一个DataFrame中,每一个group最后都变成了一列(或者一行)。

另外一个我容易忽略的点就是,在groupby之后,可以接很多很有意思的函数,apply/transform/其他统计函数等等,都要用起来!


彩蛋~

意外发现这两种不同的语法格式在jupyter notebook上结果是一样的,但是形式有些微区别

df.groupby(['key1','key2'])[['data2']].mean()

Python中的groupby分组

df.groupby(['key1','key2'])['data2'].mean()

Python中的groupby分组

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141349.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • R语言PCA分析_r语言可视化代码

    R语言PCA分析_r语言可视化代码R语言中的PCA分析函数R语言常用PCA分析函数有prcomp与princomp,二者主要是计算方法的差别,建议采用prcomp(SVD方法)prcomp函数prcomp函数使用较为简单,但是不同于常规的求取特征值和特征向量的方法,prcomp函数是对变量矩阵采用SVD方法计算其奇异值(原理上是特征值的平方根),函数帮助中描述为函数结果中的sdev。prcomp函数输入参数为变量矩阵(x…

    2022年10月12日
  • SpringBoot面试题整理,常问SpringBoot面试题汇总(2020版)

    SpringBoot面试题整理,常问SpringBoot面试题汇总(2020版)找工作的历程太艰难,面试的过程很心烦,在没着落的每一天,心情都不太美妙,这时的我们唯一能做的就是多总结,多做准备,这样,起码心里会好受些!所以我准备了一点SpringBoot的面试题,为还正在找工作的小伙伴多增加些成功的筹码!1、什么是SpringBoot?SpringBoot是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。2、SpringBoot有哪些优点?.

  • socketpair的使用

    socketpair的使用

    2021年12月14日
  • VS 环境使用MySQL Connector C 6.1 连接数据库

    VS 环境使用MySQL Connector C 6.1 连接数据库下载MySQLConnector/C,根据你的系统版本选择下载ZIPARCHIVE,下载链接 配置附加目录和库目录 项目–>属性–>配置属性–>VC++目录-包含目录中加入mysqlConnectC文件的include目录(根据自己的目录设置,此处测试使用了绝对路径) C:\Users\kelvin\Downloads\mysql-connector-c-…

  • 网页大作业代码自取[通俗易懂]

    网页大作业代码自取[通俗易懂]网页大作业(内有代码可免费自取) 为了便于大家自取,代码都写在一页上,本人还是建议大家通过外链样式来引入css,代码仅供学习,如有侵权联系删除。![主页效果展示](https://img-blog.csdnimg.cn/20210505002015238.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpb25nbGxpbmc=,size_1

  • pycharm安装库老是失败_申报状态已申报未导入

    pycharm安装库老是失败_申报状态已申报未导入解决Pycharm导入库失败的问题在pycharm中每一个project都可以有一个属于自己的库,在创建新project的时候会给到一个新的库,这个时候的话就有可能会出现安装过的库报错,还需要重新安装的问题。如果不是创建一个大工程的话可以把这个工程的库的路径指向默认的文件夹,然后在默认的文件夹中安装常用的库,然后小脚本之类的就指向这个文件夹,这样子就不用下次重新安装库了。acondana使用方法:https://blog.csdn.net/weixin_44857413/article/de

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号