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'为两个函数名

  • 相关阅读:
    C结构体中数据的内存对齐问题
    vs2010编译vtk5.8.0 release版本失败的解决方法
    C/C++堆、栈及静态数据区详解 (转载)
    总结一下最近一个月在深圳做的东西
    Stack overflow的问题
    完美的js验证网址url(正则表达式)
    ArrayList,Vector,LinkedList的存储性能和特性
    web程序优化
    巧用 Windows 键盘快捷键
    禁止右键
  • 原文地址:https://www.cnblogs.com/USTC-ZCC/p/11117300.html
Copyright © 2011-2022 走看看