首页 > 解决方案 > 如何在多列的groupby的某个级别下获得第一组?

问题描述

我对第 2 级中的第一组感兴趣,并希望获取与其相关的所有行。

看看下面的例子:

col1  col2  col3   col4
 1     34   green   10
            yellow  20
            orange  30
       89   green   40
            yellow  50
            orange  60
 2     89   green   15
            yellow  25
            orange  35
       90   green   45
            yellow  55
            orange  65

请注意,每个级别 2 组的行长不一定是 3。

现在我想得到col2下的所有第一组,那么结果应该是:

col1  col2  col3   col4
 1     34   green   10
            yellow  20
            orange  30
 2     89   green   15
            yellow  25
            orange  35

示例和问题修改自问题:How to get the first group in a groupby of multiple columns?

我已经尝试过该get_group方法,但似乎无法解决这个特定问题。

我想知道是否有任何一行代码可以解决这类问题?谢谢!

标签: pandaspandas-groupbymulti-index

解决方案


有一个快速的stack/unstack解决方案:

df.unstack('col3').groupby(level=0).head(1).stack('col3')

输出:

                col4
col1 col2 col3      
1    34   g       10
          o       30
          y       20
2    89   g       15
          o       35
          y       25

推荐阅读