我有一个视频数据框,其中有几列标签(字符串),如下所示:
import pandas as pd
videos = [(1, 'cool video','drama','horror'), (2, 'great video','sports','drama'), (3,'super video','comedy','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 great video sports drama
2 3 super video comedy horror
然后我有另一个搜索词数据框“df_search_terms”(例如,我可以将其放入列表中)。我想看看这些搜索词是否在其中一列中至少出现一次,如果出现,则在搜索词的数据帧中增加一个计数器(也就是说,好的,我们为视频找到了一次这个词,所以+=1)。为了澄清,我想知道在包含+/-1000个视频的数据框中,至少有一个标签的搜索词匹配了多少次
显然,我可以对匹配项进行计数,但我只想为特定项在df_search_项中增加一次计数器。类似这样的东西(这不起作用,但我希望你能理解要点):
search_count=df['tag_1'].str.contains('drama').sum()
df_search_terms.loc[(df_search_terms['search_term'] == 'drama'),'matching_videos'] +=1
df_搜索_术语如下:
search_terms = [('drama',0), ('horror',0), ('sports',0)]
df_search_terms = pd.DataFrame(data=search_terms, columns=['search_term', 'number_matching_videos'])
search_term number_matching_videos
drama 0
horror 0
sports 0
我想解决办法在于巧妙地使用apply,但恐怕我想不出来
我尝试使用下面这样的“if”语句,但我有一个错误:
if df.loc[(df['name'] == 'drama') | (df['tag_1'] == 'drama') | (df['tag_2'] == 'drama')]:
df_search_terms.loc[(df_search_terms['search_term'] == 'drama'),'matching_videos'] +=1
ValueError:数据帧的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()
试试这个:
还有一种方法:
使用正则表达式搜索和计算所有匹配项
将所有标记列合并为单个字符串并进行搜索
输出
相关问题 更多 >
编程相关推荐