Выберите строки в Pandas DataFrame с одинаковыми значениями в одном столбце, но с другим значением в другом столбце - PullRequest
0 голосов
/ 04 января 2019

Скажите, что у меня есть датаФрейм панд ниже:

   A      B     C   D
1  foo    one   0   0
2  foo    one   2   4
3  foo    two   4   8
4  cat    one   8   4
5  bar    four  6  12
6  bar    three 7  14
7  bar    four  7  14

Я хотел бы выбрать все строки, которые имеют одинаковые значения в A, но разные значения в B. Поэтому я хотел бы, чтобы вывод моего кода был:

   A      B    C   D
1  foo    one  0   0
3  foo    two  4   8
5  bar  three  7  14
6  bar    four 7  14

Какой самый эффективный способ сделать это? У меня есть приблизительно 11 000 строк с большим разбросом значений столбцов, но эта ситуация часто возникает. В моем наборе данных, если элементы в столбце A равны, то значение соответствующего столбца B также должно быть равным, однако из-за неправильной маркировки это не так, и я хотел бы это исправить, для меня было бы нецелесообразно делать это путем один.

Ответы [ 2 ]

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

Вы можете попробовать, как предложено @Daniel, groupby + filter + drop_duplicates:

>>> df.groupby('A').filter(lambda g: len(g) > 1).drop_duplicates(subset=['A', 'B'], keep="first")
     A      B  C   D
0  foo    one  0   0
2  foo    two  4   8
4  bar   four  6  12
5  bar  three  7  14

ИЛИ, если вы хотите удалить дубликаты между подмножеством столбцов A & B, то можете использовать ниже, но в строке также будет cat.

>>> df.drop_duplicates(subset=['A', 'B'], keep="first")
     A      B  C   D
0  foo    one  0   0
2  foo    two  4   8
3  cat    one  8   4
4  bar   four  6  12
5  bar  three  7  14
0 голосов
/ 04 января 2019

Использование groupby + фильтр + головка :

result = df.groupby('A').filter(lambda g: len(g) > 1).groupby(['A', 'B']).head(1)
print(result)

выход

     A      B  C   D
0  foo    one  0   0
2  foo    two  4   8
4  bar   four  6  12
5  bar  three  7  14

Первый group-by и filter удаляют строки без дублированных значений A (т.е. cat), второй создает группы с одинаковыми A, B и для каждого из них получает первый элемент.

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