#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')]