Python: успешное объединение str.contains и df.groupby в pandas - PullRequest
0 голосов
/ 07 мая 2020

Я совсем новый программист и действительно борюсь с проектом, над которым работаю. У меня есть список данных mov ie, в котором я пытаюсь показать 10 лучших результатов mov ie в заданном жанре mov ie.

Вот что у меня есть на данный момент:

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. Я также пытаюсь напечатать заголовок mov ie с соответствующей оценкой, которая отображается в результате.
Есть какие-нибудь указания на то, как я могу подойти к этому?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Это должно дать вам только Истинные записи.

rank[True] 
0 голосов
/ 07 мая 2020

Я считаю, что вам нужно сначала отфильтровать DataFrame по boolean indexing с маской, а затем сгруппировать по столбцу 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)
...