代码之家  ›  专栏  ›  技术社区  ›  jangorecki

使用python数据表按组排列的前n行

  •  3
  • jangorecki  · 技术社区  · 7 年前

    按组查询前n行的正确方法是什么 python datatable ?
    例如,获取最大的前2行 v3 价值观 id2, id4 第一组大熊猫的表达方式如下:

    df.sort_values('v3', ascending=False).groupby(['id2','id4']).head(2)
    

    在R使用中 data.table :

    DT[order(-v3), head(v3, 2L), by=.(id2, id4)]
    

    或在R使用中 dplyr :

    DF %>% arrange(desc(v3)) %>% group_by(id2, id4) %>% filter(row_number() <= 2L)
    

    示例数据和使用熊猫的预期输出:

    import datatable as dt
    dt = dt.Frame(id2=[1, 2, 1, 2, 1, 2], id4=[1, 1, 1, 1, 1, 1], v3=[1, 3, 2, 3, 3, 3])
    df = dt.to_pandas()
    df.sort_values('v3', ascending=False).groupby(['id2','id4']).head(2)
    #   id2  id4  v3
    #1    2    1   3
    #3    2    1   3
    #4    1    1   3
    #2    1    1   2
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   Pasha    7 年前

    在最新版本的 datatable (即将发布0.8.0版),这可以通过组合分组、排序和筛选来实现:

    from datatable import *
    DT = Frame(id2=[1, 2, 1, 2, 1, 2], 
               id4=[1, 1, 1, 1, 1, 1], 
               v3=[1, 3, 2, 3, 3, 3])
    
    DT[:2, :, by(f.id2, f.id4), sort(-f.v3)]
    

    产生

         id2  id4  v3
    ---  ---  ---  --
     0     1    1   3
     1     1    1   2
     2     2    1   3
     3     2    1   3
    
    [4 rows x 3 columns]
    

    说明:

    • by(f.id2, f.id4) 按列“id2”和“id4”对数据分组;
    • 这个 sort(-f.v3) 命令告诉 可计算的 按“v3”列的降序排列记录。在……面前 by() 此操作员将在每组中应用;
    • 第一 :2 选择前2行,在每组中再次选择;
    • 第二 : 选择所有列。如果需要,这可能是列或表达式的列表,允许您对每个组的前2行执行一些操作。