zoukankan      html  css  js  c++  java
  • groupby+agg

    一.在处理pandas表格数据时,有时会遇到这样的问题:按照某一列聚合后,判断另一列是否出现唯一值,比如安泰杯--跨境电商比赛中,某个商人的ID如果出现在两个国家(xx和yy),则要剔除这样的数据,这就需要我们按照商人ID进行groupby,然后判断每个商人所属的国家是否值唯一,不唯一则剔除。

    def unique_num(x):

      return len(np.unique(x))  #自定义函数

    train.groupby(['buyer_admin_id']).agg({'buyer_country_id':unique_num})

    二.下面对groupby和agg使用方法进行总结:

    1. 分组后,返回一个含有分组大小的Series

    按key1分组:  df.groupby(['key1']).size()

    按[key1,key2]分组: df.groupby(['key1','key2']).size()

    2. 对data1按key1进行分组,并计算data1列的平均值

     df['data1'].groupby(df['key1']).mean()

    说明:groupby没有进行任何的计算。它只是进行了一个分组。数据(Series)根据分组键进行了聚合,产生了一个新的Series,其索引为key1列中的唯一值。

    3.对data1按[key1,key2]进行分组,并计算data1的平均值

    df.groupby(['key1','key2'])['data1'].mean()

    4.agg函数使用:

    1)df.groupby(['key1'])['data1'].min() == 

         df.groupby(['key1'])['data1'].agg({'min'}) ==

         (推荐使用)df.groupby(['key1']).agg({'data1':'min'})#对data1列,取各组的最小值,名字还是data1

    2)按key1分组后,aggregate各组data1的最小值和最大值:

    df.groupby(['key1'])['data1'].agg({'min','max'}) ==(推荐使用)df.groupby(['key1']).agg({'data1':['min','max']})

    3)可以对groupby的结果更正列名(不推荐用这个,哪怕在后面单独更改列名):

    df.groupby(['key1'])['data1'].agg({'a':'min','b':'max'})#这里的'min' 'max'为两个函数名

  • 相关阅读:
    Apache Ant 1.9.1 版发布
    Apache Subversion 1.8.0rc2 发布
    GNU Gatekeeper 3.3 发布,网关守护管理
    Jekyll 1.0 发布,Ruby 的静态网站生成器
    R语言 3.0.1 源码已经提交到 Github
    SymmetricDS 3.4.0 发布,数据同步和复制
    beego 0.6.0 版本发布,Go 应用框架
    Doxygen 1.8.4 发布,文档生成工具
    SunshineCRM 20130518发布,附带更新说明
    Semplice Linux 4 发布,轻量级发行版
  • 原文地址:https://www.cnblogs.com/USTC-ZCC/p/11117300.html
Copyright © 2011-2022 走看看