Pandas:如果字符串在多个列中的任何一列中至少存在一次,则求和计数,并将此计数添加到具有搜索项的另一个dataframe中

2024-09-28 20:51:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在这里问过一次这个问题,但我想澄清一下:Pandas: I want to sum a count if a string exists in any one of several columns and add this count to another dataframe with the searched term

我有一个视频数据框,其中有几列标签(字符串),与此测试数据类似:

videos = [(1, 'cool video','drama','horror'), (2, 'nice video','sports','drama'),
 (3,'super video','video','scary horror')]

df = pd.DataFrame(data=videos, columns=['video_id', 'title','tag_1','tag_2'])

    video_id    title       tag_1   tag_2
0   1           cool video  drama   horror
1   2           nice video  sports  drama
2   3           cool video  video   scary horror

搜索词“df_search_terms”的第二个数据框有一列词。我想看看这些搜索词是否在其中一个视频列(标题或标签)中至少出现一次,如果出现,则在搜索词的数据帧中增加一个计数器(也就是说,OK,我们为视频找到了这个词一次,所以+=1)。为了澄清,我想知道在包含+/-1000个视频的数据框中,至少有一列中搜索词匹配了多少次

在我的另一个问题中,我有两种解决方案,以下是其中之一:

search_re = '(' + df_search_terms.search_term.str.cat(sep=')|(') + ')'

df_search_terms['number_matching_videos'] = (
df[['title','tag_1','tag_2']]
.agg(' '.join, axis=1)
.str.extractall(search_re)
.notnull().sum())

但是,这会产生以下结果:

    search_term     number_matching_videos
0   drama                                2
1   horror                               2
2   sports                               1
3   video                                4

匹配视频的数量是4,而我希望它是3(有3个匹配行)


Tags: to数据dfsearch视频titletagvideo