Как мне отсортировать столбцы .csv с несколькими строками (Python)

#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)
  

Теперь у вас есть оценки для каждого жанра