iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >df.groupby()方法讲解
  • 775
分享到

df.groupby()方法讲解

pandaspython数据分析 2023-09-12 05:09:36 775人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

df.groupby()方法讲解 分组:根据研究目的,将所有样本点按照一个或多个属性划分为多个组,就是分组。 pandas中,数据表就是DataFrame对象,分组就是groupby方法。将DataF

df.groupby()方法讲解

分组:根据研究目的,将所有样本点按照一个或多个属性划分为多个组,就是分组。

pandas中,数据表就是DataFrame对象,分组就是groupby方法。将DataFrame中所有行按照一列或多列来划分,分为多个组,列值相同的在同一组,列值不同的在不同组。

分组后,就得到一个groupby对象,代表着已经被分开的各个组。后续所有的动作,比如计数,求平均值等,都是针对这个对象,也就是都是针对各个组。即在每个组组内进行计数,求平均值等。

分组的返回结果

df = pd.DataFrame([['a', 'man', 120, 90],                   ['b', 'woman', 130, 100],                   ['a', 'man', 110, 108],                   ['a', 'woman', 120, 118]], columns=['level', 'gender', 'math','chinese'])group = df.groupby('gender')

df.groupby() 函数返回的对象是一系列键值对,其中键是分组的字段值,值是该字段值下的数据表。分组的结果是无法直接输出的,print()只能看到该结果的数据类型。可以用循环对分组后的结果进行遍历。

print(group)# for key, value in group:    print(key)    print(value)    print("")man  level gender  math  chinese0     a    man   120       902     a    man   110      108woman  level gender  math  chinese1     b  woman   130      1003     a  woman   120      118

按一列分组:df.groupby(column)

group = df.groupby('gender') # 按照'gender'列的值来分组,创建一个groupby对象# group = df.groupby(['gender']) # 等价写法for key, df in group:    print(key)    print(df)man  level gender  math  chinese0     a    man   120       902     a    man   110      108woman  level gender  math  chinese1     b  woman   130      1003     a  woman   120      118

按多列分组:df.groupby([column1, column2])

group = df.groupby(['gender', 'level'])# 先按照'grade'列的值来分组。每组内,再按'level'列来分组。也返回一个groupby对象for key, value in group:    print(key)    print(value)    print("")('man', 'a')  level gender  math  chinese0     a    man   120       902     a    man   110      108('woman', 'a')  level gender  math  chinese3     a  woman   120      118('woman', 'b')  level gender  math  chinese1     b  woman   130      100

查看每组的统计数据:df.groupby(column).describe()

对数据表中的数值列进行统计,给出包括count = 计数,mean = 平均数,std = 方差,min = 最小值,25% = 四分位数,50% = 二分位数,75% = 四分之三分位数,max = 最大值的信息。不会对非数值列统计。

返回的是一个dataframe。

  • 查看所有列的统计信息

    group = df.groupby(['gender'])df1 = group.describe()# df1 = df.groupby(['gender']).describe() # 等价写法print(type(df1)) print(df1)<class 'pandas.core.frame.DataFrame'> math                         chinese  \       count   mean       std    min    25%    50%    75%    max   count   gender             man      2.0  115.0  7.071068  110.0  112.5  115.0  117.5  120.0     2.0   woman    2.0  125.0  7.071068  120.0  122.5  125.0  127.5  130.0     2.0            mean        std    min    25%    50%    75%    max  gender                           man      99.0  12.727922   90.0   94.5   99.0  103.5  108.0  woman   109.0  12.727922  100.0  104.5  109.0  113.5  118.0
  • 查看指定列的统计信息

group = df.groupby(['gender'])df1 = group.describe()['math'] # 只看math列的统计信息print(df1)count   mean    std    min    25%    50%    75%    maxgender   man       2.0  115.0  7.071068  110.0  112.5  115.0  117.5  120.0woman     2.0  125.0  7.071068  120.0  122.5  125.0  127.5  130.0
  • 查看纵向视图

    unstack()可以将每列的统计信息垂直排列。

group = df.groupby(['gender'])df1 = group.describe().unstack()print(df1)gendermath     count  man         2.000000                woman       2.000000         ...         max    man       120.000000                woman     130.000000chinese  count  man         2.000000                woman       2.000000         ...                woman     113.500000         max    man       108.000000                woman     118.000000dtype: float64

组内离散列计数:df.groupby(column)[column2].value_counts()

数据表中的列按值是否连续,可以分为连续值列、离散值列。对于离散值列,可以统计其不重复值的个数。对于连续值列,统计不重复值一般没有意义。统计结果是一个Series对象。

group = df.groupby(['gender'])df1 = group['level'].value_counts() # 统计'level'列的不重复值个数print(type(df1))print(df1)<class 'pandas.core.series.Series'>gender  levelman     a        2woman   a        1        b        1pyName: level, dtype: int64

组内数值列和:df.groupby(column).sum()

group = df.groupby(['gender'])df1 = group.sum()print(df1)math  chinesegender               man      230      198woman    250      218

组内成员数:df.groupby(column).count()

每组内,按列统计每组的成员数。每列的统计结果是一样的

group = df.groupby(['gender'])df1 = group.count()print(df1)level  math  chinesegender                      man         2     2        2woman       2     2        2

组内数值列均值:df.groupby(column).mean()

每组内,统计所有数值列的均值,非数值列无均值。

所有组的均值

group = df.groupby(['gender'])df1 = group.mean()print(df1)math  chinesegender               man      115       99woman    125      109

单组的均值

group = df.groupby(['gender'])df1 = group['math'].mean()print(df1)genderman      115woman    125Name: math, dtype: int64

组内数值列最大值:df.groupby(column).max()

每组内,统计所有数值列的最大值,非数值列无最大值

统计所有数值列的最大值

group = df.groupby(['gender'])df1 = group.max()print(df1)level  math  chinesegender                     man        a   120      108woman      b   130      118

统计单个数值列的最大值

group = df.groupby(['gender'])df1 = group['math'].max()print(df1)genderman      120woman    130Name: math, dtype: int64

组内应用函数:df.groupby(column1)[column2].apply()

group = df.groupby(['gender'])df1 = group['math'].apply(np.mean) # 求组内均值print(df1)genderman      115.0woman    125.0Name: math, dtype: float64

组内不同列用不同函数:df.groupby(column).agg({column1:func, column2:func,…})

group = df.groupby(['gender'])df1 = group.agg({'math':np.mean, 'chinese':np.std})print(df1)math    chinesegender                 man      115  12.727922woman    125  12.727922

来源地址:https://blog.csdn.net/HTDiiii/article/details/127000069

--结束END--

本文标题: df.groupby()方法讲解

本文链接: https://www.lsjlt.com/news/404069.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作