Here's an approach using .pivot_table()
method.
First of all, you have to convert movieCater
column to a list using .apply()
method.
>>> df
MovieID movieCater rating
0 1 Action, Comedy, Adventure 4
1 2 Action, Crime 3
2 3 Crime 2
>>> df.assign(movieCater_list = df['movieCater'].apply(lambda x: x.split(', ')))
MovieID movieCater rating movieCater_list
0 1 Action, Comedy, Adventure 4 [Action, Comedy, Adventure]
1 2 Action, Crime 3 [Action, Crime]
2 3 Crime 2 [Crime]
Next, use .explode()
method on the movieCater_list
column.
>>> df.assign(movieCater_list = df['movieCater'].apply(lambda x: x.split(', '))).explode('movieCater_list')
MovieID movieCater rating movieCater_list
0 1 Action, Comedy, Adventure 4 Action
0 1 Action, Comedy, Adventure 4 Comedy
0 1 Action, Comedy, Adventure 4 Adventure
1 2 Action, Crime 3 Action
1 2 Action, Crime 3 Crime
2 3 Crime 2 Crime
Finally use .pivot_table()
>>> df.assign(movieCater_list = df['movieCater'].apply(lambda x: x.split(', '))).explode('movieCater_list').pivot_table(values='rating', index=['MovieID', 'movieCater'], columns='movieCater_list', fill_value=0)
movieCater_list Action Adventure Comedy Crime
MovieID movieCater
1 Action, Comedy, Adventure 4 4 4 0
2 Action, Crime 3 0 0 3
3 Crime 0 0 0 2