Найти все строки в фрейме данных, где текстовый столбец ссылается на идентификатор вне фрейма данных - PullRequest
0 голосов
/ 24 марта 2020

У меня большой CSV-файл. Ниже показан минимальный воспроизводимый пример.

Столбец «Комментарий» для одной строки может ссылаться на идентификатор, который отображается в столбце идентификатора другой строки. Или он может ссылаться на идентификатор, который отсутствует в фрейме данных - это интересующие меня строки.

Я уже извлек из текста / строки в столбце «Комментарий» все идентифицированные номера идентификаторов - если ID на самом деле ссылка. Теперь я хочу получить все строки, в которых в столбце «CommentReferencesID» (список идентификаторов) упоминается число, , а не в столбце фактического идентификатора.

Примечание:

  • 'CommentReferencesID', если он заполнен, всегда является действительным идентификатором. Это просто случай, если идентификатор находится в кадре данных или нет.
  • Идентификатор может не быть уникальным сам по себе, но будет уникальным при объединении со столбцом LANG.

Мой минимальный пример кода:

import pandas as pd

from io import StringIO

# df = pd.read_csv('item_list.csv', encoding='utf-8-sig')

# Sample item_list.csv contains (could be a file with 10,000+ rows in reality)...

data = StringIO('''

ID,LANG,Comment

10001,EN,"Lorem ipsum dolor sit amet, consectetur."

10001,DE,Fusce a aliquet ipsum. 9003

10003,EN,"Lorem ipsum dolor amet, consectetur elit. 10011"

10004,EN,Integer vehicula mollis commodo.

10004,JP,Nunc vitae.  10011.  Fermentum odio. 10003

10006,EN,Curabitur lorem.  7001. Nec ullamcorper. 10007

10007,EN,Quisque pharetra nisl non fermentum porta. 8123

10008,EN,"Sed risus massa, sit auctor eu, id nulla. 10010 "

10009,EN,"Mauris mattis lacus nulla, eu ornare ante a."

10010,EN,Fusce ac diam et dolor maximus feugiat.

''')

df = pd.read_csv(data)

# df.set_index(['ID', 'LANG'], inplace=True)

# capture a group of numbers

regex_pattern = r'(\d+)'

# create a new column with a list of the captured numbers

df['CommentReferencesID'] = df['Comment'].str.findall(regex_pattern)

df

enter image description here

Я искал , используя isin () для столбца, который имеет значения списка но я не смог заставить его работать, так как возвращенные строки были неправильными (например, он возвращал строки, в которых текст не ссылался ни на какой идентификатор - что совершенно нормально). Любое решение или указатели на другие потоки / решения будут очень полезны.

Ожидаемый результат - строки 1,2,4,5 и 6 возвращаются, поскольку идентификаторы 9003, 10011, 7001 и 8123 не упоминается в столбце ID. Строки 0,3, 7, 8 и 9 не возвращаются, поскольку они либо не содержат идентификатора вообще, либо идентификатор находится в кадре данных.

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