关于python中子集的代码说明

时间:2014-10-11 11:56:20

标签: python pandas

我有这个特殊的代码,可以在一年内找到评分最高的电影:

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的关系,因为我试图找到有史以来收视率最低的电影,而我今年遇到了问题。

2 个答案:

答案 0 :(得分:1)

你提供的数据非常少,这使得它成为一种猜谜游戏。但是,我相信我的猜测很可能。

这一行:

for year, subset in data.groupby('year'):

建议dataDataFrame,并且从此行开始,以下内容包含yeartitlerating的列。

因此,当您执行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_movieTrue的逻辑向量,否则为False