代码之家  ›  专栏  ›  技术社区  ›  Ramón J Romero y Vigil

pandas数据帧中基于多索引的组头提取

  •  3
  • Ramón J Romero y Vigil  · 技术社区  · 5 年前

    我发现了 this question 它演示了如何对 DataFrame 基于多索引的第一级。所以一个初始数据帧

    l = [[1,'A',99],[1,'B',102],[1,'C',105],[1,'D',97],[2,'A',19],[2,'B',14],[2,'C',10],[2,'D',17]]
    df = pd.DataFrame(l,columns = ['idx1','idx2','col1'])
    df.set_index(['idx1','idx2'],inplace=True)
    
    # assume data has been received like this...
    print df
    
               col1
    idx1 idx2      
    1    A       99
         B      102
         C      105
         D       97
    2    A       19
         B       14
         C       10
         D       17
    

    可以在每个 level=1 要生成的组:

               col1
    idx1 idx2      
    1    C      105
         B      102
         A       99
         D       97
    
    2    A       19
         D       17
         B       14
         C       10
    

    我的问题是: 如何提取第一个 n 每个组的元素基于第一级?

    例如,如果 n=2 结果是:

               col1
    idx1 idx2      
    1    C      105
         B      102
    
    2    A       19
         D       17
    

    提前感谢您的考虑和回复。

    1 回复  |  直到 5 年前
        1
  •  4
  •   Quang Hoang    5 年前

    你只需要 head groupby 已排序数据帧的:

    df.sort_values('col1', ascending=False).groupby('idx1').head(2)
    

    输出:

               col1
    idx1 idx2      
    1    C      105
         B      102
    2    A       19
         D       17