我有两个熊猫数据帧,一个包含所有开放文本电影评论的一列(movie_review_df),另一个(movie_ngrams_df)包含最常见的ngram(ngram的前5位= 1,ngram的前5位= 2)在movie_review_df中找到。
从本质上讲,我想编写一个函数,该函数将遍历movie_ngrams_df中我的单词/单词短语列的每一行,并将它们用作查找来查找包含这些单词/单词的评论。
想象一下我的movie_ngrams_df在2列中有2个值。
1)a列中的“爱”(ngram_wordphrase)和b列中的“ one”(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中的每个电影评论文本,并拉出包含“ love”一词的评论。我希望输出是一个新的df(ngram_detail_df),其中所表示的每一行都包含word_phrase(例如a列中的love),然后是其中包含单词“ love”的完整的单个字符串审阅(放置在b列中)。因此,每个word_phrase可能会在a列中多次列出。
那时(您知道它要来了),我希望能够对“太长”的movie_ngrams_df中的下一个word_phrase执行相同的操作。我想将这些新的“太长”结果附加到“爱情”搜索返回的结果中,以便最后,我们只有一个df,其中包含最高的word_phrase和每个带有该word / word_phrase的电影评论。>
答案 0 :(得分: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)