Python DataFrame: удаляет все строки до первого появления определенного значения - PullRequest
0 голосов
/ 09 января 2019

У меня есть панда 'Dataframe', которая выглядит примерно так же, пожалуйста, дайте мне знать, если вам нужно pd.Dataframe в таблице ниже.

iD      a   b   c
c1      2   3   4
c1      2   3   4
c1      2   3   4
c1      2   E   4
c1      2   3   4
c2      3   4   5
c2      3   4   5
c2      3   E   5
c2      3   4   5

теперь в этом фрейме данных есть два идентификатора c1 и c2. Я хочу удалить все приведенные выше строки всякий раз, когда в столбце «b» появляется «E».

мой окончательный фрейм данных должен выглядеть как

iD      a   b   c
c1      2   E   4
c1      2   3   4
c2      3   E   5
c2      3   4   5

Просто стараюсь держать вопрос коротким, чтобы люди могли на него ответить. Пожалуйста, дайте мне знать, если мне нужно добавить несколько дополнительных точек данных в dataframe

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вы можете groupby iD и использовать boolean indexing с idxmax, чтобы остаться там, где первый B будет найден:

df.groupby('iD').apply(lambda x: x.loc[(x.b == 'E').idxmax():,:])
                .reset_index(drop=True)

   iD  a  b  c
0  c1  2  E  4
1  c1  2  3  4
2  c2  3  E  5
3  c2  3  4  5
0 голосов
/ 09 января 2019

Используйте groupby и cumsum для маски логических значений, сравнивая столбец "b" с буквой "E":

df[df.b.eq('E').groupby(df.iD).cumsum()]

   iD  a  b  c
3  c1  2  E  4
4  c1  2  3  4
7  c2  3  E  5
8  c2  3  4  5

df[df.b.eq('E').groupby(df.iD).cumsum()].reset_index(drop=True)

   iD  a  b  c
0  c1  2  E  4
1  c1  2  3  4
2  c2  3  E  5
3  c2  3  4  5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...