групповые столбцы, содержащие списки

1

Мой кадр данных pandas выглядит следующим образом:

title               genre                rating
Shutter Island      [Horror, Action]     8
Spectre             [Action, Thriller]   7

Я хотел бы сгруппировать по жанру и найти средний рейтинг. Проблема состоит в том, что столбец жанра содержит списки (переменной длины). Я просто хочу добавить фильм в группу, если жанр появится в списке жанров.

Я знаю, что, поскольку списки изменяемы, я могу сделать что-то вроде

movies['genre']=movies['genre'].apply(tuple)
movies.groupby(['genre']).mean()

Но, конечно, это не то, что я хочу, потому что я слишком много групп. Поскольку это может помочь, набор всех возможных жанров

{'Action',
 'Adventure',
 'Animation',
 'Comedy',
 'Crime',
 'Documentary',
 'Drama',
 'Family',
 'Fantasy',
 'Foreign',
 'History',
 'Horror',
 'Music',
 'Mystery',
 'Romance',
 'Science Fiction',
 'TV Movie',
 'Thriller',
 'War',
 'Western'}
Теги:
pandas
group-by

1 ответ

2
Лучший ответ

Вы должны сгладить списки, а затем можно заполнить mean:

from itertools import chain

df = pd.DataFrame({
    'genre' : list(chain.from_iterable(movies['genre'].values.tolist())), 
    'rating' : movies['rating'].values.repeat(movies['genre'].str.len())
})

print (df)
      genre  rating
0    Horror       8
1    Action       8
2    Action       7
3  Thriller       7

df = df.groupby('genre', as_index=False)['rating'].mean()
print (df)
      genre  rating
0    Action     7.5
1    Horror     8.0
2  Thriller     7.0

Ещё вопросы

Сообщество Overcoder
Наверх
Меню