如何用Pandas对独热编码的电影类型列批量分组统计评分次数?
解决方法:一次性统计所有类型的评分次数
当然可以一次性选中所有类型列,而且这个方法完全能处理一部电影属于多种类型的情况,下面是具体的实现步骤:
1. 自动识别所有类型列
首先我们不需要手动输入所有类型列名,可以通过排除非类型列(MovieID和rating)来自动获取:
# 获取所有类型列(排除MovieID和rating) genre_columns = data.columns.difference(['MovieID', 'rating'])
2. 统计各类型的评分次数
因为你的数据是独热编码格式(1代表电影属于该类型,0代表不属于),所以每个类型列的求和结果就是该类型被评分的次数——每一个1都对应一部有评分的该类型电影,而且如果一部电影属于多个类型,每个对应类型的计数都会加1,完美解决多类型电影的统计问题。
具体代码如下:
# 对每个类型列求和,得到评分次数 number_of_ratings = data[genre_columns].sum().reset_index() # 重命名列名以匹配预期输出 number_of_ratings.columns = ['Genre', 'Number of times rated']
验证你的示例数据
用你提供的DataFrame运行这段代码,会得到完全符合预期的结果:
| Genre | Number of times rated |
|---|---|
| Action | 1 |
| Adventure | 0 |
| Animation | 1 |
| Childrens | 2 |
| Comedy | 3 |
| Crime | 1 |
| Documentary | 0 |
额外处理:如果存在无评分的电影
如果你的数据中有rating为空的行(即电影有类型但未被评分),可以先过滤掉这些行再统计:
# 过滤掉没有评分的记录 filtered_data = data.dropna(subset=['rating']) # 再进行统计 number_of_ratings = filtered_data[genre_columns].sum().reset_index() number_of_ratings.columns = ['Genre', 'Number of times rated']
内容的提问来源于stack exchange,提问作者Rulli
相关产品推荐
相关产品推荐

