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函数。



    尊重写作权利,转载请注明出处 ^_^
  • 相关阅读:
    Runtime类与Process类
    runtime 得到jvm的内存空间信息
    random 类的实际应用
    NumberFormat类实际应用
    java 国际化程序实现
    Calendar类取得系统的当前日期
    demo-文件复制
    用递归方法 在列表中 使用二分查找。找一个数字
    第一个 购物车程序
    练习题1 —— 全局替换程序
  • 原文地址:https://www.cnblogs.com/convict/p/14883053.html
Copyright © 2011-2022 走看看