Объединение 2 DataFrame для поиска разных строкPython

Программы на Python
Anonymous
Объединение 2 DataFrame для поиска разных строк

Сообщение Anonymous »

У меня есть два DataFrame, которые содержат некоторые данные журнала, назовем их CorrectData и WrongData
Каждая строка имеет несколько столбцов. Я не могу отсортировать DataFrames по значению столбцов. Мне нужен способ взять первую строку из WrongData и на основе ее значения в двух столбцах Cl1 и Cl2 проверить, есть ли строка в CorrectData DataFrame содержит эти два значения в одних и тех же двух столбцах. Он может находиться в любом месте кадра данных, и строка может присутствовать там несколько раз.
Они выглядят примерно так:
CorrectData:

Код: Выделить всё

 Cl1             Time           Cl2                  OtherData       Origin
0x18ddE322      21111        0000000000000000         0xFFFFF         2
0x18ffa800      1234         0000000004100ff3         0xDWAFF         1
0x18ddE322      22121        0000000000000000         0xFFFFF         2
0x18ffa800      11111        0000000004100ff3         0xD213F         1
0x18ddE322      21111        0000000000000000         0xFFFFF         2
Неверные данные:

Код: Выделить всё

 Cl1             Time           Cl2                  OtherData       Origin
0x18ddE322      21111        0000000000000000         0xFFFFF         2
0x18ddE322      21111        0000000000000000         0xFFFFF         2
0x18ffa800      2211         0000000004100ff3         0xDWAFF         1
0x18ddE322      21111        0000000000000000         0xFFFFF         2
0x18ffa800      2211         0000000004100ff3         0xDWAFF         1
0x18ffa800      92121        0000000004100ff3         0xD213F         1
Я уже пробовал этот подход:

Код: Выделить всё

comparison = pd.merge(CorrectData, WrongData, left_on=["Cl1","Cl2"], right_on=["Cl1","Cl2"], how='inner', indicator=True)
comparison = comparison[comparison['_merge'] != 'both']
print(comparison.to_string())
Я ожидал сравнения DataFrame, содержащего строки, помеченные как left_only или right_only, но получил пустой DataFrame. Благодаря ручному тестированию я знаю, что существуют строки с разными значениями, которые не совпадают между DataFrames.
Когда я попробовал How="outer", возвращенный DataFrame содержал строки. которые были в обоих DataFrames, помечены только как левые или правые. Оба столбца имеют один и тот же тип, в них нет пробелов и других символов. Я понятия не имею, почему он не распознает данные.
Я также пробовал следующее:
Когда How="outer" я получите DataFrame, содержащий некоторые значения, как я сказал выше. Допустим, значение — "0x18ffa800", оно находится в Cl1, а другое – 0000000004100ff3, а оно находится в Cl2
Когда я попробовал:

Код: Выделить всё

first_row= CorrectData.loc[(CorrectData["Cl1"] == '0x18ffa800') & (CorrectData["Cl2"] == '0000000004100ff3')]
first_row
Для ОБА DataFrames CorrectData и WrongData я получаю количество строк, в которых получены эти значения. Но pd.merge их почему-то не распознает
Буду благодарен за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/789 ... erent-rows

Вернуться в «Python»