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)
blank

相关推荐

  • mac使用tree命令

    mac使用tree命令brewinstalltreetreetree-L1#深度1treeufo  #展示子目录find.|xargsgrep-ri""  #-r递归-i忽略大小写tree-N  #解决汉语乱码 命令行的双击tab太好用现在想要进入一个比较深的目录每进入一层就ls一下太慢了cd到一个目录下之后就双击tab…

  • 随机数:真随机数和伪随机数一样吗_rdrand真随机数

    随机数:真随机数和伪随机数一样吗_rdrand真随机数说到随机这个词,相信各位肯定都深有体会了。生活中有太多的不确定因素从各方各面影响着我们,但也正是因为这样我们的人生更加多彩,具有了更多的可能性。可以说,随机是个非常有魅力的东西。而游戏开发者通常也会利用随机让游戏更加的吸引人。例如你正在玩的手机游戏里面的抽卡系统就是很好的例子。笔者曾经在阴阳师的抽符大坑中痛苦不堪。什么,你只玩王者荣耀?那里面的抽英雄抽符文,我想你应该也经历过绝望吧。

    2022年10月22日
  • 关于雅虎优化

    关于雅虎优化尽可能的减少HTTP的请求数[content]合并背景图、缓存等使用CDN(ContentDeliveryNetwork)[server]也是缓存,加速,要考虑CDN失效、CDN缓

  • mac idea2021 激活码(JetBrains全家桶)

    (mac idea2021 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~41MD…

  • Java开发经典实战!java编程培训学校排名

    Java开发经典实战!java编程培训学校排名GC概述垃圾收集(GarbageCollection)通常被称为“GC”,由虚拟机“自动化”完成垃圾回收工作。思考一个问题,既然GC会自动回收,开发人员为什么要学习GC和内存分配呢?为了能够配置上面的参数配置?参数配置又是为了什么?“当需要排查各种内存溢出,内存泄露问题时,当垃圾成为系统达到更高并发量的瓶颈时,我们就需要对GC的自动回收实施必要的监控和调节。”JVM中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生随线程而灭。栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理。它们的

  • Javaweb实现旅游管理系统(商城项目)(一)

    Javaweb实现旅游管理系统(商城项目)(一)一.选题的意义及选题内容概述随着信息资源的逐步网络化,信息消费者将被笼罩在巨大的信息网络之中,并由此而具备充分的获取信息的能力。此时,消费者对信息的需求将更具针对性,更为个性化。因此,网络信息服务具有传统信息服务所不具备的双向性,消费者能够更多地参与信息服务的过程,从而加速个性化服务时代的到来。锻炼自己的操作能力,将大学理论课程的学习转化为动手能力提高的基础。通过本系统,用户可以方便查询旅

发表回复

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

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