我目前正在做一个项目,我需要计算每年每种类型的受欢迎程度。数据集为我提供了电影,但是每部电影都可以具有多个流派,如下面的示例df所示(也有杂乱的格式流派,用“ |”分隔)
release_year genres
0 2015 Action|Adventure|Science Fiction|Thriller
1 2015 Action|Adventure|Science Fiction|Thriller
2 2015 Adventure|Science Fiction|Thriller
3 2015 Action|Adventure|Science Fiction|Fantasy
4 2015 Action|Crime|Thriller
我的第一步是将每个流派分成不同的列,以便使用str.split来处理干净的数据
df[['Genre_1','Genre_2','Genre_3','Genre_4','Genre_5']] = df['genres'].str.split("|",expand=True)
release_year Genre_1 Genre_2 Genre_3 Genre_4 Genre_5
0 2015 Action Adventure Science Fiction Thriller None
1 2015 Action Adventure Science Fiction Thriller None
2 2015 Adventure Science Fiction Thriller None None
3 2015 Action Adventure Science Fiction Fantasy None
4 2015 Action Crime Thriller None None
由于每部电影都有多部电影,我该如何使用groupby语句来计算每种类型的流行度?看来我想折叠所有展开的列,但保持每个列的年份为键,理想情况下会导致如下所示:
release_year All genres
0 2015 Action
1 2015 Action
2 2015 Adventure
3 2015 Action
4 2015 Action
我非常感谢您对此提供的任何帮助。 非常感谢!
答案 0 :(得分:1)
我想以下内容将为您提供所需的输出。
df = pd.DataFrame(
[
[2015, 'Action|Adventure|Science Fiction|Thriller'],
[2015, 'Action|Adventure|Science Fiction|Thriller'],
[2015, ' Action|Crime|Thriller']
],
columns=['release_year', 'genres']
)
df2 = df['genres'].str.split('|').apply(pd.Series)
df2.index = df.set_index(['release_year']).index
df2.stack().reset_index(['release_year']).rename(columns={0: 'All Genres'})
输出:
release_year All Genres
0 2015 Action
1 2015 Adventure
2 2015 Science Fiction
3 2015 Thriller
0 2015 Action
1 2015 Adventure
2 2015 Science Fiction
3 2015 Thriller
0 2015 Action
1 2015 Crime
2 2015 Thriller