zoukankan      html  css  js  c++  java
  • Pandas (五) 数据分组

    我们经常需要对某些标签或索引的局部进行累计分析, 这时就需要用到 groupby 了.

    实际上,我们可以把 groupby 理解成一个分割(split),应用(apply),组合(combine)的过程.

     

    一个经典分割-应用-组合操作如下图所示,其中应用的是一个求和函数.

    • 分割: 将 DataFrame按照指定的键分割成若干组
    • 应用: 对每个组应用函数, 通常是累计,转换或过滤函数
    • 组合: 将每一组的结果合并成一个输出组

    在数据处理中, 我们经常需要把某些特征的共同值进行累计分析.

    例如有一列特征, 储存的是用户学历数据, 分为, 初中, 高中, 大学

    我们经常做的一件事情是, 将初中的, 高中, 大学的都各自分为一组, 然后统计每一组中的不同统计量的值.

    df.groupby('学历') # by 以----进行分组

    需要注意的是,这里的返回值不是一个 DataFrame 对象,而是一个 DataFrameGroupBy 对象。

    你可以将它看成是一种特殊形式的 DataFrame,里面隐藏着若干组数据,但是在没有应用累计函数之前并不会真的计算。

    我们在应用累计函数之后, 就会完成真正的计算。

    df.groupby('学历').count()
    
    df.groupby('学历').sum()
    
    df.groupby('学历').mean()
    
    ……

    1.筛选列

    可以直接在groupby对象中选择列:

    df.groupby('学历')['产品评分'].mean()

    也可以统计后在选择列:

    df.groupby('学历').mean()['产品评分']

    2.可以通过遍历的方法, 将DataFrameGroupBy中的数据打印出来

    for group_name,group_data in df.groupby('学历'):
        print(group_name)
        print("-------")
        print(group_data)
        print('---------分割线----------')

    特殊需求:

    1. 假如对于一列,我想要同时应用多个统计函数呢?
    2. 假如对于不同的列,我想要用不同的统计函数呢?
    3. 应用自定义函数进行统计
    test  = df.groupby('学历')
    test.agg(['max','min','mean']) # 列表,同时统计多个统计值
    test.agg({"测试成绩":['mean','std','var'], "产品评分":['max','min','mean']})

    也可以应用自定义的统计函数进行统计。

  • 相关阅读:
    第三百二十八天 how can I 坚持
    第三百二十七天 how can I 坚持
    第三百二十六天 how can I 坚持
    第三百二十五天 how can I 坚持
    第三百二十四天 how can I 坚持
    第三百二十二天 how can I 坚持
    第三百二十一天 how can I 坚持
    第三百零八至三百二十天 how can I 坚持
    POJ 2346:Lucky tickets
    POJ 3461:Oulipo
  • 原文地址:https://www.cnblogs.com/BC10/p/11697733.html
Copyright © 2011-2022 走看看