包含列表的分组列

时间:2018-08-31 12:41:20

标签: python pandas group-by

我的熊猫数据框看起来如下:

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'}

1 个答案:

答案 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