我有这个特殊的代码,可以在一年内找到评分最高的电影:
best_movies = []
for year, subset in data.groupby('year'):
is_best_movie = subset.rating == subset.rating.max()
best_movies.append([year,subset[is_best_movie].title.values[0], subset.rating.max()])
best_df = pd.DataFrame(best_movies,columns=['year','title','rating'])
best_df.tail()
任何人都可以解释subset
的作用及其与is_best_movie
的关系,因为我试图找到有史以来收视率最低的电影,而我今年遇到了问题。
答案 0 :(得分:1)
你提供的数据非常少,这使得它成为一种猜谜游戏。但是,我相信我的猜测很可能。
这一行:
for year, subset in data.groupby('year'):
建议data
是DataFrame
,并且从此行开始,以下内容包含year
,title
和rating
的列。
因此,当您执行data.groupby('year')
时,您可以将同一年的所有电影组合在一起,这就是subset
包含的内容。
is_best_movie = subset.rating == subset.rating.max()
这一行将is_best_movie
变成一个布尔系列,它的长度等于subset
的长度,除了最高等级的电影外,所有都是假的(可能有多个人有最高评级)。因此,当我们subset[is_best_movie]
时,我们只得到那一年具有最大评级的行。
best_movies.append([year,subset[is_best_movie].title.values[0], subset.rating.max()])
在这里,年份,具有最佳评级标题和最佳评级的电影的第一个(有点随机)都作为子列表添加到名为best_movies
的列表中。
在这里:
best_df = pd.DataFrame(best_movies,columns=['year','title','rating'])
此列表再次转为DataFrame
。
所以我们有一个DataFrame,我假设有很多电影,他们的年份和评级,我们最终会得到一个列出每年“最佳”电影的数据框。
如果你想找到有史以来收视率最低的电影,我想你可以这么做:
data.sort('rating').iloc[:10]
例如,这将为您提供评分最差的10部电影。
或者,如果根据评论中的建议,您希望每年最糟糕的电影 ,则需要更改两行:
is_best_movie = subset.rating == subset.rating.min()
best_movies.append([year,subset[is_best_movie].title.values[0], subset.rating.min()])
答案 1 :(得分:-1)
is_best_movie
是True
的逻辑向量,否则为False
。