zoukankan      html  css  js  c++  java
  • Pandas之groupby分组


    释义

    groupby用来分组,调用groupby 之后返回pandas.core.groupby.generic.DataFrameGroupBy,其实就是由一个个格式为(key, 分组后的dataframe)的元组,组成的列表:

    [(key1, dataframe1), (key2, dataframe2), ...]
    

    案例

    • 初始化数据,此时这个班级有2个同名的人都叫Jack
    df = pd.DataFrame({'stu_name': ['Tom', 'Tony', 'Jack', 'Jack'], 'stu_age': [16, 16, 15, 21]})
    print(df)
    
      stu_name  stu_age
    0      Tom       16
    1     Tony       16
    2     Jack       15
    3     Jack       21
    
    • 根据stu_name 进行分组,根据上面的释义,则可以遍历列表中的每个元组
    groups = df.groupby(['stu_name'])
    for v in groups:
        print(v)
    
    ('Jack',   stu_name  stu_age
    2     Jack       15
    3     Jack       21)
    ('Tom',   stu_name  stu_age
    0      Tom       16)
    ('Tony',   stu_name  stu_age
    1     Tony       16)
    

    显而易见,每个元素v中,v[0]是groupby的列名,v[1]就是该分组下的dataframe

    groupby之后的聚合操作

    groupby之后更常见的是使用各种聚合函数,如

    • min:最小值
    • max:最大值
    • sum:总和
    • mean:平均值
    • median:中位数
    • count:计数
    • var:方差
    • std:标准差

    案例

    • 初始化数据
    df = pd.DataFrame({'stu_name': ['Tom', 'Tony', 'Jack', 'Jack'], 'stu_age': [16, 16, 15, 21], 'stu_score': [99, 1, 1, 0]})
    
      stu_name  stu_age  stu_score
    0      Tom       16         99
    1     Tony       16          1
    2     Jack       15          1
    3     Jack       21          0
    
    • 以名字分组,并对分组后的年龄、成绩求和(例子不具备显示意义,仅做演示)
    sum_df = df.groupby(['stu_name']).sum()
    print(sum_df)
    
              stu_age  stu_score
    stu_name                    
    Jack           36          1
    Tom            16         99
    Tony           16          1
    

    groupby之后直接调用聚合函数,会对所有的列进行聚合操作,但有些时候需要在分组后对多个列进行不同的聚合操作,比如groupby之后,年龄求和,分数求平均值,这时候就需要使用agg函数

    groupby之后使用agg函数

    • 沿用上面的原始数据,以名字分组,分组后年龄求和,成绩求平均值
    agg_df = df.groupby(['stu_name']).agg({'stu_age': 'sum', 'stu_score': 'mean'})
    print(agg_df)
    
              stu_age  stu_score
    stu_name                    
    Jack           36        0.5
    Tom            16       99.0
    Tony           16        1.0
    

    可以看出如果groupby后要对分组内所有的列都进行一样的操作,那直接调用相关的聚合函数即可,如果是分组后不同的列进行不同的聚合操作,则可以直接采用agg函数。



    尊重写作权利,转载请注明出处 ^_^
  • 相关阅读:
    [Python接口自动化]从零开始学习python自动化(1):环境搭建
    转载:python + requests实现的接口自动化框架详细教程
    转载:selenium的wait.until()
    转载:selenium webdriver定位不到元素的五种原因及解决办法
    关于xpath语句完全正确,但是页面报错: no such element: Unable to locate element: {"method":"xpath","selector":"xpath"}
    BDD测试之selenium控制滚动条
    阿里云 -- 2万并发用户方案
    关于语音合成和识别
    在线浏览文档的方案
    关于全文搜索引擎
  • 原文地址:https://www.cnblogs.com/convict/p/14883053.html
Copyright © 2011-2022 走看看