pandas之分组groupby()的使用整理与总结

2023-05-16

文章目录

        • 前言
        • 准备
        • 基本操作
        • 可视化操作
        • REF

前言

在使用pandas的时候,有些场景需要对数据内部进行分组处理,如一组全校学生成绩的数据,我们想通过班级进行分组,或者再对班级分组后的性别进行分组来进行分析,这时通过pandas下的groupby()函数就可以解决。在使用pandas进行数据分析时,groupby()函数将会是一个数据分析辅助的利器。
groupby的作用可以参考 超好用的 pandas 之 groupby 中作者的插图进行直观的理解:
在这里插入图片描述

准备

读入的数据是一段学生信息的数据,下面将以这个数据为例进行整理grouby()函数的使用:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv('./data.csv')
print(df)
      Name  Gender  Age  Score
0     Alen    Male   18     80
1      Bob    Male   19     90
2     Cidy  Female   18     93
3   Daniel    Male   20     87
4    Ellen  Female   17     96
5  Frankie    Male   21    100
6     Gate    Male   20     88
7     Hebe  Female   22     98

基本操作

在进行对groupby函数进行学习之前,首先需要明确的是,通过对DataFrame对象调用groupby()函数返回的结果是一个DataFrameGroupBy对象,而不是一个DataFrame或者Series对象,所以,它们中的一些方法或者函数是无法直接调用的,需要按照GroupBy对象中具有的函数和方法进行调用。

grouped = df.groupby('Gender')
print(type(grouped))
print(grouped)

<class 'pandas.core.groupby.groupby.DataFrameGroupBy'>

分组时,不仅仅可以指定一个列名,也可以指定多个列名:

grouped = df.groupby('Gender')
grouped_muti = df.groupby(['Gender', 'Age'])

print(grouped.size())
print(grouped_muti.size())

Gender
Female    3
Male      5
dtype: int64

Gender  Age
Female  17     1
        18     1
        22     1
Male    18     1
        19     1
        20     2
        21     1
dtype: int64

指定多个列名个单个列名后的区别在于,分组的主键或者索引(indice)将一个是单个主键,另一个则是一个元组的形式:

print(grouped.get_group('Female'))
print(grouped_muti.get_group(('Female', 17)))

    Name  Gender  Age  Score
2   Cidy  Female   18     93
4  Ellen  Female   17     96
7   Hebe  Female   22     98
    Name  Gender  Age  Score
4  Ellen  Female   17     96

通过调用get_group()函数可以返回一个按照分组得到的DataFrame对象,所以接下来的使用就可以按照·DataFrame·对象来使用。如果想让这个DataFrame对象的索引重新定义可以通过:

df = grouped.get_group('Female').reset_index()
print(df)

   index   Name  Gender  Age  Score
0      2   Cidy  Female   18     93
1      4  Ellen  Female   17     96
2      7   Hebe  Female   22     98

这里可以总结一下,由于通过groupby()函数分组得到的是一个DataFrameGroupBy对象,而通过对这个对象调用get_group(),返回的则是一个·DataFrame·对象,所以可以将DataFrameGroupBy对象理解为是多个DataFrame组成的。
而没有调用get_group()函数之前,此时的数据结构任然是DataFrameGroupBy,此时进行对DataFrameGroupBy按照列名进行索引,同理就可以得到SeriesGroupBy对象,取多个列名,则得到的任然是DataFrameGroupBy对象,这里可以类比DataFrameSeries的关系。

按照上面的思路理解后,再调用get_group()函数后得到的DataFrame对象按照列名进行索引实际上就是得到了Series的对象,下面的操作就可以按照Series对象中的函数行了。

在没有进行调用get_group(),也就是没有取出特定某一组数据之前,此时的数据结构任然是DataFrameGroupBy,其中也有很多函数和方法可以调用,如max()count()std()等,返回的结果是一个DataFrame对象。

print(grouped.count())
print(grouped.max()[['Age', 'Score']])
print(grouped.mean()[['Age', 'Score']])

        Name  Age  Score
Gender                  
Female     3    3      3
Male       5    5      5
        Age  Score
Gender            
Female   22     98
Male     21    100
         Age      Score
Gender                 
Female  19.0  95.666667
Male    19.6  89.000000

如果其中的函数无法满足你的需求,你也可以选择使用聚合函数aggregate,传递numpy或者自定义的函数,前提是返回一个聚合值。

def getSum(data):
    total = 0
    for d in data:
        total+=d
    return total


print(grouped.aggregate(np.median))
print(grouped.aggregate({'Age':np.median, 'Score':np.sum}))
print(grouped.aggregate({'Age':getSum}))

aggregate函数不同于apply,前者是对所有的数值进行一个聚合的操作,而后者则是对每个数值进行单独的一个操作:

def addOne(data):
    return data + 1

df['Age'] = df['Age'].apply(addOne)
df['Age'] = df['Age'].apply(int)

可视化操作

对组内的数据绘制概率密度分布:

grouped['Age'].plot(kind='kde', legend=True)
plt.show()

由于grouped['Age']是一个SeriesGroupby对象, 顾名思义, 就是每一个组都有一个Series. 所以直接plot相当于遍历了每一个组内的Age数据。

REF

groupby官方文档
超好用的 pandas 之 groupby

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas之分组groupby()的使用整理与总结 的相关文章

随机推荐

  • 在Jetson上配置RealSense相机驱动

    1 下载源码 https github com IntelRealSense librealsense span class token builtin class name cd span librealsense scripts set
  • aruco marker使用笔记

    在英伟达Jetson Xaiver开发板上配置 SDK环境 opencv 4 1 1 CUDA 10 2 1 git clone https github com pal robotics aruco ros 2 复制到catkin ws
  • catkin_make命令

    catkin make是在catkin工作区中构建代码的便捷工具 catkin make遵循catkin工作区的标准布局 xff0c 如REP 128中所述 用法 假设您的catkin工作区位于 catkin ws中 xff0c 则应始终在
  • docker容器中运行界面程序

    Docker比较常用的场景是 运行无界面的后台服务 或者 运行Web服务 不过有时出于个人的喜好或特定的需求 xff0c 我们会希望在Docker中运行带图形界面的应用程序 将容器中的图形界面展示到外部的一般性思路 xff1a 目前Unix
  • linux录屏

    Linux下好用的录屏软件是kazam录屏后视频处理软件kdenlive根据剪辑好的视频撰写解说词 xff0c 使用讯飞配音app将解说词文字转换为语音mp3将语音与视频通过kdenlive软件合成在一起 xff0c 完美的演示视频诞生了
  • 【python】conda和pip安装库之间的区别

    conda 首先 xff0c conda是一个通用的包管理器 xff0c 意思是什么语言的包都可以用其进行管理 xff0c 自然也就包括Python了 在安装Anaconda或者Miniconda时 xff0c 会对conda进行一同安装
  • OpenHarmony-Overview_zh

    OpenHarmony开源项目 项目介绍 OpenHarmony是开放原子开源基金会 xff08 OpenAtom Foundation xff09 旗下开源项目 xff0c 定位是一款面向全场景的开源分布式操作系统 OpenHarmony
  • 【python量化】用时间卷积神经网络(TCN)进行股价预测

    写在前面 下面这篇文章首先主要简单介绍了目前较为先进的时间序列预测方法 时间卷积神经网络 xff08 TCN xff09 的基本原理 xff0c 然后基于TCN的开源代码 xff0c 手把手教你如何通过时间卷积神经网络来进行股价预测 xff
  • 【python量化】将Transformer模型用于股票价格预测

    写在前面 下面的这篇文章主要教大家如何搭建一个基于Transformer的简单预测模型 xff0c 并将其用于股票价格预测当中 原代码在文末进行获取 1 Transformer模型 Transformer 是 Google 的团队在 201
  • 解读:基于GCN的股票预测模型

    前言 xff1a 自ICLR2017首次提出图卷积神经网络 xff08 GCN xff09 的概念 xff0c 该模型在节点分类 边预测等任务上表现出了出色的性能 在传统因子选股模型中 xff0c 常常将股票视为独立的个体 xff0c 但事
  • 【python量化】基于backtrader的深度学习模型量化回测框架

    写在前面 在本文中 xff0c 我们将介绍使用PyTorch构建一个深度学习模型 xff0c 并将其集成到backtrader回测框架中 具体地 xff0c 我们将使用PyTorch来实现一个长短期记忆神经网络 xff08 LSTM xff
  • 【量化交易】股票价格前复权与后复权的区别以及注意事项

    时不时就会看到到底是用股票前复权还是后复权价格的讨论 xff0c 比如下面就是一个很经典的问法 xff1a 我用前复权价格计算指标的时候 xff0c 发现会出现负价格 xff0c 就没法取log了 xff0c 应该是分红太多导致的 xff0
  • skfuzzy.cmeans与sklearn.KMeans聚类效果对比以及使用方法

    因为实验中要用到聚类效果的对比 xff0c 没有时间自己来实现算法 xff0c 所以Kmeans就用到了sklearn中的Kmeans类 xff0c FCM用到了skfuzzy cmeans 几个概念 1 Kmeans Kmeans是聚类算
  • 对论文中模型进行编程实现时的注意要求和总结

    看论文时 xff0c 如果论文中有对自己研究方向有帮助或者具有实际用处的模型时 xff0c 不免通过编程对其进行实现 如果是一个简单的模型 xff0c 用个caffe tensorflow之类的框架跑跑就出来的那就无所谓了 xff0c 但是
  • 机器学习里面的Ground Truth是什么意思

    在看英文文献的时候 xff0c 经常会看到Ground Truth这个词汇 xff0c 翻译的意思是地面实况 xff0c 放到机器学习里面 xff0c 再抽象点可以把它理解为真值 真实的有效值或者是标准的答案 维基百科对Ground Tru
  • python 字符串(str)与列表(list)以及数组(array)之间的转换方法详细整理

    前提 xff1a list以及array是python中经常会用到的数据类型 xff0c 当需要对list以及array进行文件的读写操作的时候 xff0c 由于write函数参数需要的是一个str xff0c 所以这时就需要对list或者
  • RMSE(均方根误差)、MSE(均方误差)、MAE(平均绝对误差)、SD(标准差)

    RMSE xff08 Root Mean Square Error xff09 均方根误差 衡量观测值与真实值之间的偏差 常用来作为机器学习模型预测结果衡量的标准 MSE xff08 Mean Square Error xff09 均方误差
  • LINUX——FIREWALLD防火墙基础(FIREWALLD-CMD命令操作+FIREWALLD-CONFIG图形管理工具)

    LINUX FIREWALLD防火墙基础 xff08 FIREWALLD CMD命令操作 43 FIREWALLD CONFIG图形管理工具 xff09 前言一 FIREWALLD概述1 1 FIREWALLD1 2 FIREWALLD和I
  • 时间序列分析之ADF检验

    ADF检验 在使用很多时间序列模型的时候 xff0c 如 ARMA ARIMA xff0c 都会要求时间序列是平稳的 xff0c 所以一般在研究一段时间序列的时候 xff0c 第一步都需要进行平稳性检验 xff0c 除了用肉眼检测的方法 x
  • pandas之分组groupby()的使用整理与总结

    文章目录 前言准备基本操作可视化操作REF 前言 在使用pandas的时候 xff0c 有些场景需要对数据内部进行分组处理 xff0c 如一组全校学生成绩的数据 xff0c 我们想通过班级进行分组 xff0c 或者再对班级分组后的性别进行分