Python — Условно удалить первую строку по группе

#python #pandas

#python #pandas

Вопрос:

Я хочу условно удалить первую строку каждой группой в моем фрейме данных.

Внутри каждого ‘ID’ в первой строке всегда должна быть цифра 1 в столбце ‘Start’. Если этого не произойдет, я хотел бы удалить эту строку из фрейма данных.

 df = pd.DataFrame({'ID': ['A','A','B','B','C','C','C','D'],
               'Start': [0,1,1,0,0,0,1,1],
               'End': [1,0,0,1,1,1,0,0]})

  ID  Start  End
0  A      0    1
1  A      1    0
2  B      1    0
3  B      0    1
4  C      0    1
5  C      0    1
6  C      1    0
7  D      1    0
  

Результат должен выглядеть следующим образом:

 result = pd.DataFrame({'ID': ['A','B','B','C','D'],
               'Start': [1,1,0,1,1],
               'End': [0,0,1,0,0]})

  ID  Start  End
0  A      1    0
1  B      1    0
2  B      0    1
3  C      1    0
4  D      1    0
  

Ответ №1:

Используйте groupby и cumsum , затем выполните фильтрацию в предположении, что итоговые суммы группы должны начинаться с 1.

 df[~df.groupby('ID')['Start'].cumsum().eq(0)]

  ID  Start  End
1  A      1    0
2  B      1    0
3  B      0    1
6  C      1    0
7  D      1    0
  

Ответ №2:

Попробуйте с idxmax с transform

 df[df.index>=df.groupby('ID').Start.transform('idxmax')]