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

#python #pandas #function #for-loop

#python #pandas #функция #for-цикл

Вопрос:

У меня есть два фрейма данных pandas, один из которых содержит один столбец всех обзоров фильмов с открытым текстом (movie_review_df), а другой (movie_ngrams_df), который содержит наиболее распространенные ngrams (top 5 из ngram = 1 и top 5 из ngram = 2), найденные в movie_review_df.

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

Представьте, что мой movie_ngrams_df имеет 2 значения в 2 столбцах.

1) Слово «любовь» в столбце a (ngram_wordphrase) и «один» в столбце b (ngram_group)

2) Фраза «слишком длинная» в столбце a и «два» в столбце b

Я думаю, что функция, которая использует цикл и .contains() вызов, будет работать, но, похоже, я не могу понять это.

Я бы хотел, чтобы это работало примерно так.

 def ngram_lookup (ngram,reviews):
appended_df = pd.concat(for word in ngram:                            
reviews_df[reviews_df['reviews'].str.contains('ngram')])
return appended_df
  

Мне нужна функция, которая будет искать текст каждого обзора фильма в movie_review_df и извлекать обзоры, содержащие слово «любовь». Я хочу, чтобы результатом был новый df (ngram_detail_df), где каждая представленная строка содержит word_phrase (например, love в столбце a), а затем полный обзор отдельной строки (помещенный в столбец b), который содержит в нем слово ‘love’. Таким образом, каждая фраза word_phrase, вероятно, будет указана несколько раз в столбце a.

ТОГДА (вы знали, что это произойдет) Я хочу иметь возможность сделать то же самое для следующей word_phrase в нашем movie_ngrams_df, которая была «слишком длинной». Я хочу добавить эти новые «слишком длинные» результаты к результатам, возвращенным из нашего поиска «love», чтобы в конце у нас был только один df, содержащий верхние word_phrases и каждый обзор фильма, где присутствует это слово / word_phrase.

Ответ №1:

Как насчет чего-то вроде

 words = movie_ngrams_df["ngram_wordphrase"].array
ngram_detail_df = movie_review_df.copy()

for word in words:
    ngram_detail_df[word] = ngram_detail_df["reviews"].apply(lambda x: word in x)

ngram_detail_df = ngram_detail_df.melt(id_vars=["reviews"])
ngram_detail_df = ngram_detail_df[ngram_detail_df["value"] == True]
ngram_detail_df = ngram_detail_df.loc[:, ["reviews", "variable"]
ngram_detail_df.rename(columns={"variable": "ngram"}, inplace=True)