如何获取多列的groupby中某一级别下的第一组?

问题描述 投票:2回答:1

我对第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

这个例子和问题是根据问题修改的。如何在多列的groupby中得到第一组?

我尝试了以下方法 get_group 方法,但它似乎不能解决这个具体问题。

我想知道是否有什么单行代码可以解决这种问题?Thx!

pandas pandas-groupby multi-index
1个回答
2
投票

我们可以这样做

df.groupby(level=[0,2]).head(1)
Out[342]: 
                  col4
col1 col2 col3        
1    34   green     10
          yellow    20
          orange    30
2    89   green     15
          yellow    25
          orange    35

3
投票

有一个快速 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
© www.soinside.com 2019 - 2024. All rights reserved.