Удалить строки с конфликтующими метками - PullRequest
0 голосов
/ 11 января 2019

Скажем, у меня есть таблица, которая выглядит следующим образом:

A   B 
1   bull 
1   bull 
1   pug 
1   bull 
2   pug 
2   pug 
3   dane 
3   dane 
4   shepherd

Я ищу один вкладыш для удаления строк с конфликтующими метками. В приведенном выше случае строки, помеченные как 1, удаляются, оставляя другие, независимо от дубликатов. Моя текущая попытка состоит из нескольких строк и в некоторых случаях терпит неудачу.

Ответы [ 2 ]

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

Мне нравится использовать .filter для такого рода проблем:

from io import StringIO

import pandas
data = StringIO("""\
A   B 
1   bull 
1   bull 
1   pug 
1   bull 
2   pug 
2   pug 
3   dane 
3   dane 
4   shepherd
""")

df = (
    pandas.read_csv(data, sep='\s+')
        .groupby(by=['A'])
        .filter(lambda g: g['B'].nunique() == 1)
)
print(df)

И я получаю:

   A         B
4  2       pug
5  2       pug
6  3      dane
7  3      dane
8  4  shepherd
0 голосов
/ 11 января 2019

Я использую nunique с transform

df[df.groupby('A').B.transform('nunique')==1]
   A         B
4  2       pug
5  2       pug
6  3      dane
7  3      dane
8  4  shepherd

Вы также можете использовать groupby и nunique, сохраняя строки с уникальным счетом как 1.

df[df.A.map(df.groupby('A').B.nunique()).eq(1)]

   A         B
4  2       pug
5  2       pug
6  3      dane
7  3      dane
8  4  shepherd 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...