Как получить первую группу под определенным уровнем группы из нескольких столбцов? - PullRequest
4 голосов
/ 27 мая 2020

Меня интересует первая группа на уровне 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

Пример и проблема изменена из вопроса: Как получить первую группу в группе из нескольких столбцов?

Я пробовал метод get_group, но, похоже, не может решить эту проблему c вопрос.

Мне интересно, есть ли какой-нибудь однострочный код, который мог бы решить этот вопрос? Спасибо!

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Есть быстрое 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
2 голосов
/ 27 мая 2020

Мы можем

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
...