我的熊猫数据框看起来如下:
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'}
答案 0 :(得分: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