#python #pandas #dataframe #matplotlib #jupyter-notebook
#python #pandas #фрейм данных #matplotlib #jupyter-ноутбук
Вопрос:
Я пытаюсь найти средний рейтинг для каждого жанра в этом списке.csv и столкнулся с проблемой. Столбец Жанр содержит несколько жанров, разделенных запятыми (например. The Dark Night имеет 3 жанра: боевик, криминал, драма). Я написал код, который будет работать только в том случае, если для каждой строки был один жанр, и я не уверен, как сканировать столбцы с несколькими жанрами.
data = pd.read_csv('movies.csv') # read in file
dataGenre = data
df5 = pd.DataFrame(data={"Genre":dataYearScore['Genre'], "Score": dataYearScore['Score']})
genre_list5 = []
avg_scores5 = []
for genre in df5["Genre"].unique():
genre_list5.append(genre)
avg_scores5.append(df5.loc[df5["Genre"]==genre, "Score"].mean())
plt.bar(genre_list5, avg_scores5, width = 0.8)
plt.xlabel('Genre')
plt.ylabel('Score')
plt.xticks(rotation=65)
plt.title('Average Score for Each Genre')
plt.show()
Если бы кто-нибудь мог помочь, я был бы очень признателен 🙂
Вот фотография того, как выглядят данные
Udate: Возможно ли создать новый список с одним из каждого жанра? Это должно упростить задачу, мне просто нужно выяснить, как.
Ответ №1:
Вы могли бы использовать разделение и разнесение.
df = df.assign(Genre=df['Genre'].str.split(',')).explode('Genre').reset_index(drop=True)
Ответ №2:
Я бы сделал что-то вроде этого:
from collections import defaultdict
counter = defaultdict(list)
for idx, row in df5.iterrows():
genres = row['Genre']
score = row['Score']
for genre in genres.split(','):
counter[genre].append(score)
Теперь у вас есть оценки для каждого жанра