Я пытаюсь удалить несколько строк в таблице на основе столбца изменения.groupby и select in pandas
id subindex change
A1 1 0
A1 2 1
A1 3 12
A1 4 0
A1 5 15
A1 6 1
A2 1 0
A2 2 11
A2 3 1
A2 4 0
В подгруппе (идентификатор идентичен) Когда изменение выше 10, я хочу удалить последующие строки. Таким образом, таблица будет выглядеть так:
id subindex change
A1 1 0
A1 2 1
A2 1 0
То, что я сделал это GroupBy, чтобы определить, где суб-таблицы должны быть сокращены:
df['cut_position']=df[df.change >= 10].groupby('id')['subindex'].transform(lambda x: x.min())
, что дает:
id subindex change cut_position
A1 1 0 0
A1 2 1 0
A1 3 12 3
A1 4 0 0
A1 5 15 0
A1 6 1 0
A2 1 0 0
A2 2 11 2
A2 3 1 0
A2 4 0 0
Тогда в GroupBy ('id') должно быть легко сделать, но у меня возникают проблемы с получением этой таблицы:
id subindex change cut_position
A1 1 0 0
A1 2 1 0
A1 3 12 ToRemove_3
A1 4 0 ToRemove_0
A1 5 15 ToRemove_0
A1 6 1 ToRemove_0
A2 1 0 0
A2 2 11 ToRemove_2
A2 3 1 ToRemove_0
A2 4 0 ToRemove_0
При написании кода, который может генерировать таблицу, я получаю:
df.groupby('id')[df['subindex'] >= df['cut_position'].max()].map(lambda x : 'ToRemove_' + x)
KeyError: «Колонна не найдено: Накладные, True»
Примечания: Я сделал то, что работало, но он принял слишком много времени, чтобы сделать это ...
Изменение 10 означает, что качество данных ослабила с этой точки и ниже. Поэтому я хочу удалить все данные ниже того, у кого было изменение 10 или более. – Sara
Thx Sara. Я удалил свой комментарий после повторного рассмотрения вашего вопроса. –