Как сравнить пары значений в двух информационных фреймах разных размеров в Python? - PullRequest
0 голосов
/ 09 октября 2019

У меня есть два кадра данных разных размеров:

  1. sdfn со столбцами 'ConceptID1' и ConceptID2 '
  ConceptID1  ConceptID2

0         5743        4513

1           5743        7099

2           4513        7099

3          10242        7042

4          10242        7099

...          ...         ...

2601       12028       12043

2602       12371       12043

2603      266632       54106

2604      266632       51135

2605       54106       51135
jdfn со столбцами 'Gene1' и 'Gene2'
Gene1   Gene2

0      1535     353

1      9970     332

2     23581  112401

3       846  112401

4    150160  112401

..      ...     ...

384   79626   51284

385   79626   51311

386    7305   51311

387   80342   79626

388    7305   79626

Сравнивая через оба фрейма данных, мне нужно найти совпадающие пары.

Я пробовал это

for index, row in sdfn.iterrows():
    for index, row in jdfn.iterrows():
        if ((sdfn['ConceptID1']==jdfn['Gene1']) and (sdfn['ConceptID2']==jdfn['Gene2'])) or (sdfn['ConceptID1']==jdfn['Gene2']) and ((sdfn['ConceptID2']==jdfn['Gene1'])):
            print(sdfn['ConceptID1'], jdfn['Gene1'], sdfn['ConceptID2'], jdfn['Gene2'])

Результат:

Трассировка (последний последний вызов):

Файл "", строка 3, в

if ((sdfn['ConceptID1']==jdfn['Gene1']) and (sdfn['ConceptID2']==jdfn['Gene2'])) or

(sdfn ['ConceptID1'] == jdfn ['Gene2']) и ((sdfn ['ConceptID2'] == jdfn ['Gene1'])): файл "/Библиотека / Каркасы / Python.framework / Версии / 3.7 / lib / python3.7 / site-packages / pandas / core / ops / init .py ", строка 1142, в обертке повышают ValueError (" Может толькосравнить идентично помеченные "" объекты серии ")

ValueError: может сравнивать только идентично помеченные объекты серии

1 Ответ

0 голосов
/ 09 октября 2019

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

sdfn['ConceptID1'], sdfn['ConceptID2'], jdfn['Gene1'], jdfn['Gene2']

будет ссылаться на весь столбец данных, который pandas определяет как объект типа Series, поэтому в сообщении об ошибке упоминается Series несоответствие метки.

Youсначала нужно будет переименовать переменные цикла for, а затем использовать их в поиске:

for sind, srow in sdfn.iterrows():
    for jind, jrow in jdfn.iterrows():
        if ((srow['ConceptID1']==jrow['Gene1']) and (srow['ConceptID2']==jrow['Gene2'])) or (srow['ConceptID1']==jrow['Gene2']) and ((srow['ConceptID2']==jrow['Gene1'])):
            print(srow['ConceptID1'], jrow['Gene1'], srow['ConceptID2'], jrow['Gene2'])

Обратите внимание, что в опубликованном коде переменные index и row объявлены и назначены ввнешний цикл еще не изменен во внутреннем цикле. Таким образом, вместо двух пар переменных цикла, существует только одна пара, которая увеличивается и перезаписывается, поэтому не может сравнивать соответствующие данные.

Надеюсь, это поможет!

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