Удалить строки на основе двух условий - PullRequest
0 голосов
/ 08 июля 2020

У меня есть df фрейма данных, который выглядит так:

    0   1   2   3
0   x   a       
1   x   b       
2   x   c       
3   x   a       
4   x   b       
5   x   c       
6   y   a       
7   y   b       
8   y   c       
9   z   a       
10  z   b       
11  z   c       
12  z   a       
13  z   b       
14  z   c       

Я хочу удалить строки, где df[1]=="c" AND df[0]==df[0].shift(-1)

Однако я не могу объединить эти 2 условия. Вот мой код:

m1 = (df[df[0].eq(df[0].shift(-1))])
m2 = (df[df[1].eq("x")])

df[~(m1 & m2)]

Я получаю сообщение об ошибке:

TypeError: unsupported operand type(s) for &: 'str' and 'str'

Если я попробую

df[~(m1 and m2)]

, я получаю сообщение об ошибке:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Ответы [ 2 ]

1 голос
/ 08 июля 2020

Попробуйте:

m1 = df[0].eq(df[0].shift(-1))
m2 = df[1].eq("x")

df[~(m1 & m2)]
0 голосов
/ 08 июля 2020

Вы должны заменить AND в своем условии на & .

Чтобы удалить «нежелательные» строки, извлеките строки, не соответствующие вашему условию, и сохраните их в df :

df = df[~((df[1] == 'c') & (df[0] == df[0].shift(-1)))]

Результат:

    0  1
0   x  a
1   x  b
3   x  a
4   x  b
5   x  c
6   y  a
7   y  b
8   y  c
9   z  a
10  z  b
12  z  a
13  z  b
14  z  c

(строки с индексом == 2 и 11 упал).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...