Панды, выбирающие подмножество строк до появления определенного значения в другом столбце

#python #pandas

#python #pandas

Вопрос:

Я хочу извлечь подмножество строк из моего фрейма данных до того, как значение появится в столбце Y, groupby столбец X.

Например, в этом случае для каждого уникального значения в X я хочу извлечь все строки до появления ‘1’ в Y, и выходные данные должны включать строку, в которой встречается первое ‘1’.

           X      Y      Z
 index 
 0        A      0     56
 1        A      0     67
 2        A      1     66
 3        A      0     83
 4        A      1     88
 5        B      0     52
 6        B      1     66
 7        B      1     70
 8        C      0     68
 9        C      0     72
 10       D      1     65
  

И мой желаемый результат:

           X      Y      Z
 index 
 0        A      0     56
 1        A      0     67
 2        A      1     66
 5        B      0     52
 6        B      1     66
 8        C      0     68
 9        C      0     72
 10       D      1     65
  

Заранее спасибо.

Ответ №1:

Вы можете использовать groupby и apply с помощью cumsum() хитрости x2:

 df[df.groupby('X').Y.apply(lambda x: x.cumsum().cumsum()).le(1)]

       X  Y   Z
index          
0      A  0  56
1      A  0  67
2      A  1  66
5      B  0  52
6      B  1  66
8      C  0  68
9      C  0  72
10     D  1  65
  

Ответ №2:

Думайте по-другому idxmax

 df[df.index<=df.groupby('X').Y.transform('idxmax')]
Out[110]: 
       X  Y   Z
index          
0      A  0  56
1      A  0  67
2      A  1  66
5      B  0  52
6      B  1  66
8      C  0  68
10     D  1  65
  

Комментарии:

1. Отличная идея! Хорошо работает, когда индекс числовой.

2. @coldspeed да, как раз собирался упомянуть об этом, также нужен уникальный индекс,