pandas: как удалить все строки группы, если последняя строка группы имеет определенное значение столбца - PullRequest
0 голосов
/ 20 июня 2020

у меня есть df, как показано ниже

    a    c    d
0  ABC   0.4  y
1  ABC   0.3  x
2  DEF   0.3  x
3  DEF   0.2  x
4  DEF   0.5  x
5  DEF   0.4  y

Я хотел бы отсортировать df по столбцу 'c', затем сгруппировать по столбцу 'a', а затем отбросить ВСЕ строки группы, если значение столбца 'd' = 'y' для последней строки группы

мой ожидаемый результат

    a    c    d
2  DEF   0.2  x
3  DEF   0.3  x
4  DEF   0.4  y
5  DEF   0.5  x

, поэтому группа 'AB C' была удалена, как после сортировки по столбцу 'c' как последняя строка в группе d = y, но группа 'DEF' остается последней строкой в ​​DEF col d = x

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

Прямо из вашего журнала c:

mask = (df.sort_values('c')     # sort the values by `c`
          .groupby('a')['d']    # groupby `a` and look at `d`
          .transform('last')    # select the last rows
          .ne('y')              # check if last rows are `y`
          .reindex(df.index)    # reindex as the original data
       )

df = df[mask]

Вывод:

     a    c  d
2  DEF  0.3  x
3  DEF  0.2  x
4  DEF  0.5  x
5  DEF  0.4  y
1 голос
/ 20 июня 2020

Сделаем filter

df=df.groupby('a').filter(lambda x : x.at[x['c'].idxmax(),'d']!='y')
Out[278]: 
     a    c  d
2  DEF  0.3  x
3  DEF  0.2  x
4  DEF  0.5  x
5  DEF  0.4  y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...