如何用Pandas统计含多值的Genre列中Drama的出现次数?
解决Pandas统计多流派列中特定流派的出现次数问题
问题原因
你当前使用的df[['Year','Genre']].query("genre == 'Drama'")是精确匹配,仅当Genre列的值完全等于'Drama'时才会被筛选,因此无法匹配包含多个流派(如"Drama, Comedy")的行。
两种解决方案
方案1:统计包含目标流派的行数
如果只需要统计有多少行包含Drama(不考虑一行内流派的数量),可以用str.contains做模糊匹配:
# 筛选所有Genre列包含'Drama'的行,忽略大小写、排除空值 drama_rows = df[df['Genre'].str.contains('Drama', case=False, na=False)] # 统计行数 row_count = len(drama_rows) print(f"包含Drama的行数:{row_count}")
case=False:兼容大小写(可匹配'drama'或'Drama')na=False:跳过Genre列为空的行,避免报错
方案2:统计目标流派的总出现次数
如果需要统计Drama在所有数据中的实际出现次数(比如一行有"Drama, Drama, Action"算2次),先拆分多流派再统计:
# 将每行的多流派拆分为单独行,保留Year字段 split_df = df.assign(Genre=df['Genre'].str.split(',')).explode('Genre') # 去除流派前后的空格(CSV中常出现"Drama, Comedy"这类带空格的格式) split_df['Genre'] = split_df['Genre'].str.strip() # 精确匹配Drama并统计次数 drama_total = split_df[split_df['Genre'] == 'Drama'].shape[0] print(f"Drama的总出现次数:{drama_total}")
这个方法能处理流派间的空格问题,统计结果更精准,适合需要统计单个流派总提及次数的场景。
内容的提问来源于stack exchange,提问作者johnha
相关产品推荐
相关产品推荐

