#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