zoukankan      html  css  js  c++  java
  • pandas 取 groupby 后每个分组的前 N 行

    原始数据如下:

    (图是从 excel 截的,最左1行不是数据,是 excel 自带的行号,为了方便说明截进来的)

    除去首行是标题外,有效数据为 28行 x 4列

    目前的需求是根据 partition 分组,然后取每组的前 2 行,如果不考虑排序,代码如下:
    (把head()里面的数字改成 n 就可以取 n 行)

    import pandas as pd
    
    esp_df = pd.read_excel('excel文件路径', sheet_name='Sheet名')
    esp_df.groupby(['partition', 'create_time', 'last_modified_time']).mean().reset_index(drop=False).groupby('partition').head(2)
    

    结果如下:

    分别说明如下:

    • groupby:分组,这里是根据数据中的 3 列来一起分组,因为我们并不需要做聚合运算,所以这么取可以保留原始数据不变。原始数据只有 4 列,这里 groupby 了 3 列,只剩下 size(其实把 size 放进去一起 groupby 也没问题)
    • mean:求平均值,但是在这里没用,因为上一步的 groupby 取了前面的 3 列,在本例中,前 3 列并在一起就能得到一个唯一的一行,所以这里其实也只是每一行数据自己求平均数,结果等于它本身。同理,这里替代成求和函数 sum() 也是一样的。但是不能省略,因为**省略后它就是一个 DataFrameGroupBy 类型的变量,不是 DataFrame,而 DataFrameGroupBy 是没有后面的 reset_index 方法的
    • reset_index:重置索引,groupby 之后,结果集的索引就变成了 groupby 里面的 key,这个 reset_index 把这个索引重新退回为数据。
      举例说明,在应用 reset_index 之前,即使用 mean() 之后的数据是这样的:

    可以看到左边的 3 列,也就是 groupby key 的 partition、create_time、last_modified_time 是加粗了的,说明此时这 3 列都是索引;而且 partition 因为有相同的行,还被合并了。显然这不是我们想要的。reset_index 把它们重新放回到数据列里

    参数中的 drop 作用是是否保留(重置前)的索引
    数据就又回来了,索引变成了原来默认的(0123...)

    • groupby:再次根据 partition 分组
    • head: 取每个分组的前 n 行

    如果要排序

    本例中,如果要先根据 partition 分组,然后再根据 size 倒序(从大到小)再取前 2 行,则代码如下:

    esp_df.groupby(['partition']).apply(lambda x: x.sort_values(["size"], ascending = False)).reset_index(drop=True).groupby('partition').head(2)
    

    结果如下:

    (本文完)
    --------------------------------------------------------------------------------------------------------------------------
    致虚极,守静笃

    使用我的阿里云幸运券,购买阿里云ECS有优惠:阿里云幸运券
    >>>>> 腾讯云新用户优惠 <<<<<
  • 相关阅读:
    托付和事件的使用
    在使用supervisord 管理tomcat时遇到的小问题
    无法安装vmware tools的解决方PLEASE WAIT! VMware Tools is currently being installed on your system. Dependin
    (转)Openlayers 2.X加载高德地图
    (转)openlayers实现在线编辑
    (转) Arcgis for js加载百度地图
    (转)Arcgis for js加载天地图
    (转) 基于Arcgis for Js的web GIS数据在线采集简介
    (转) Arcgis for js之WKT和GEOMETRY的相互转换
    (转)Arcgis for Js之Graphiclayer扩展详解
  • 原文地址:https://www.cnblogs.com/wuzhiblog/p/pandas_get_first_n_rows_for_each_group.html
Copyright © 2011-2022 走看看