Python:在熊猫中成功组合str.contains和df.groupby

时间:2020-05-07 04:08:59

标签: python pandas dataframe pandas-groupby partial

我是一个新程序员,我真的在为我正在研究的项目而苦苦挣扎。我有一个电影数据列表,试图在给定电影类型下显示电影的前10个得分。

这是我到目前为止所拥有的:

import pandas
from pandas import DataFrame

data = pandas.read_csv('movies.csv')
columns = data[['Title', 'Year', 'Score', 'Genre', 'Director', 'Runtime', 'Revenue']]

IMDB = pandas.DataFrame(data)

gen = IMDB['Genre'].str.contains("Comedy")
rank = IMDB.groupby(gen)['Score'].nlargest(10)
print(rank)

此代码输出以下结果:

enter image description here

但是,我想改为只拉True部分,而忽略False部分。我也在尝试打印电影标题以及结果中显示的相应分数。
关于如何解决这个问题的任何指示?

2 个答案:

答案 0 :(得分:0)

我相信您首先需要通过boolean indexing使用掩码过滤DataFrame,然后再按列Genre进行分组:

mask = IMDB['Genre'].str.contains("Comedy")
rank = IMDB[mask].groupby('Genre')['Score'].nlargest(10)
print(rank)

但是如果需要所有列,请先按列Score排序,然后使用GroupBy.head

df = IMDB[mask].sort_values('Score', ascending=False).groupby('Genre').head(10)
print(df)

答案 1 :(得分:0)

这应该只给您真实记录。

rank[True]