我有一个视频数据框,其中包含几列标签(字符串),如下所示:
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_terms 中的计数器一次。像这样的东西(这不起作用,但我希望你明白要点):
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 会是这样的:
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:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。