Как мне получить строки с одинаковыми значениями в 2 столбцах, которые соответствуют условию, и с другим значением в двух других

#python #python-3.x #pandas #dataframe #python-3.6

#python #python-3.x #pandas #dataframe #python-3.6

Вопрос:

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

           A      B     C   D  E 
    1    foo    one    0   1  0
    2    foo    one    1   2  1
    ..........
    103  foo    two    2   3  1
    54   foo    two    3   4  1
    ..........
    25   bar    three  4  15  0
    96   bar    three  5  16  1
    ..........
    67   bar    four   6  17  0
    111  bar    five   7  18  1
  

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

           A      B     C   D  E 
    1    foo    one    0   1  0
    2    foo    one    1   2  1
    ..........
    25   bar    three  4  15  0
    96   bar    three  5  16  1
    ..........
  

Объяснение:
(Это два фрейма данных, объединенные друг над другом, и столбец E определяет, из какого набора взята конкретная строка, 0 для «set_0» и 1 для «set_1». Теперь я хочу посмотреть на строки, которые имеют одинаковые значения для всех столбцов в обоих фреймах данных, кроме двух столбцов.)

В строках с индексом 1 и 2 у меня одинаковые значения для столбцов A и B, для set_1 и set_0, но с разными значениями в C amp; D. Итак, это столбцы, на которые я хочу посмотреть. И в строках с индексом 103 и 54 строки для столбцов A и B совпадают, но из одного и того же набора. Итак, мне не нужны эти строки. В строках с индексами 25 и 96 у меня одинаковые значения в столбцах A и B, для set_1 и set_0. Итак, я хочу эти строки. И строки с индексом 67 и 111 имеют разные значения в столбцах A и B, но принадлежат разным наборам, поэтому мне не нужны эти строки.

Я пробовал groupby и drop_duplicates , но я не могу получить ту часть, где я хочу запросить строки, принадлежащие разным наборам данных, обозначенные 0 и 1 столбца E.
Как мне это сделать?

Ответ №1:

Если возможно, проверьте, имеет ли каждая группа по A,B столбцу 2 разных уникальных значения при E использовании столбца:

 df = df[df.groupby(['A','B'])['E'].transform('nunique').eq(2)]
  

Комментарии:

1. что .eq(2) делать? для чего это нужно?

2. @NaveenKumar — Он сравнивает, если 2 уникальных значения, здесь 0, 1