【问题标题】:How to get the first group under certain level of a groupby of multiple columns?如何在多列的groupby的某个级别下获得第一组?
【发布时间】:2020-09-14 12:38:35
【问题描述】:

我对第 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 方法,但似乎无法解决这个特定问题。

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

【问题讨论】:

    标签: pandas pandas-groupby multi-index


    【解决方案1】:

    我们可以的

    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
    

    【讨论】:

    • 谢谢YOBEN_S!我认为您的方法对这个问题有效且清晰。现在我想知道是否可以进行一些扩展以获得第二个或其他序数组?
    • @DOG df[df.groupby(level=[0,2]).cumcount()==N], N 这里是你需要的第n个值
    【解决方案2】:

    有一个快速的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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2022-06-17
      • 2018-03-07
      • 2012-04-22
      • 1970-01-01
      • 2021-01-28
      • 2018-12-07
      相关资源
      最近更新 更多