文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

df.groupby()方法讲解

2023-09-12 05:17

关注

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()['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
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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯